• ベストアンサー

Scala

プログラミング言語Scalaでの質問です。  (1).to(5) (3).+(3) というようなメソッド呼び出しですが、左側にあるオブジェクトに対して ()を付ける理由がわかりません。1.to(5)であっても動作には問題なく、 他のメソッド呼び出しは左のオブジェクトに()は付けません。 どうして演算子メソッドのオブジェクトには()を付けるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • a_bc
  • ベストアンサー率100% (1/1)
回答No.2

Scalaではソースを解析する際,文をひとつひとつの要素に分けていきます。 (1).to(5)ではれば(1), to, (5)というふうに解釈するわけです。そして(1)のtoというメソッドを5という引数で呼び出すんだな、と解釈します。 この時,コンパイラは文法的に正しい最長の部分をひとつの要素とみなします。 したがって 1.to(5) は 1. , to , (5)と解釈されてしまいます。(1.は浮動小数点数のリテラルです) したがってコンパイラが混乱してしまうというわけです

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.1

3. は浮動小数点数のリテラルだけど 浮動小数点数に .to() がなければ、型推論上、整数と推測できる。 3.+() だと、浮動小数点数の足し算になっちゃう。。。かな? というか、実行してみれば確実にわかる。 紛らわしいし 特に他の問題がないなら、 3+3 3.0+3 って書くと思うよ?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 日本語の単語の使い方。

    難しい単語の意味を調べて、思ったことなのですが、例えば「メソッド」という意味は、GOOの辞書で調べてみたら、 【method】 (1)方法。方式。 (2)オブジェクト指向プログラミングにおいて,オブジェクトに対する操作を定義した手続き。各オブジェクトは,メッセージを受けると,対応したメソッドを起動し,自分の内部データの更新などを行う。メソッドをオブジェクトの属するクラスに定義するプログラミング言語が多い。 「メソッド」の意味が出てきたのですが、辞書によれば(1)では、方法、方式と言う意味があるのですが、例えば、野球で、ピッチャーが外角球を投げた時の、メソッド(方法)は、バットを遅く出す事だ。とは普通言わないと思うのですが、意味があっているからといって、聞いたことがない単語を使っても、間違いではないのでしょうか?    これは斉藤考さんが書いた本を読んでいて、斉藤メソッド、と言う言葉が出てきて少し、違和感を感じたので、質問をさせていただきました。

  • rubyでScalaのようにコールバックを変数として定義するには?

    rubyでScalaのようにコールバックを変数として定義するには? 最近Scalaの勉強を始めました。自分の一番好きな言語はrubyなので、比較しながら勉強してます。 参考書によると、関数をオブジェクトとして扱えるのがScalaの特徴との説明がありました。例えば、以下のような例なのですが、(行頭スペースは全角) class Kuku(a:Int,b:Int){  def calc(func:(Int,Int)=>String):String={   return func(a,b)+a*b  } } val f1=(a:Int,b:Int)=>a+"*"+b+"=" println(new Kuku(3,5).calc(f1)) これをrubyで書くと、(行頭スペースは全角) class Kuku  def initialize(x,y)   @x=x   @y=y  end  def calc   yield(@x,@y)+(@x*@y).to_s  end end puts Kuku.new(3,5).calc{|a,b| a.to_s+'*'+b.to_s+'='} とまでは書けたのですが、コールバック(ブロックパラメータの部分)、上記例だと |a,b| a.to_s+'*'+b.to_s+'=' の部分 を変数として定義(Scalaの例のf1として定義するところ)する方法を知りません。 このように関数を変数として定義する事ってrubyではできないと考えるのですが、そういった認識で間違いないでしょうか? ご指導の程、よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • プログラミング

    C言語のプログラミング歴1年くらいの者です。 LinuxのGCCを使ってプログラミングをやっている中で、オブジェクトファイルというものを知ったのですが、オブジェクトファイルってなんのためにあるんですか? ネットで調べたり友達にきいたりして、「それ単体では動作はしないが、プログラムファイルとリンクさせてコンパイルすることで動作するもの」みたいなことまでは分かっています。 ただいまいちなぜオブジェクトファイルにする必要があるとかがわかりません。 どなたか教えてください。

  • プログラミング言語の学習について

    高3です。来年から4年制大学の情報系学科に進学します。 現在、初心者向けの書籍でJAVAの学習をしていて、簡単な演算や条件分岐のパートが終わり、オブジェクト指向の学習をしています。今のペースだとあと3週間程度で今使っている参考書の学習が終わりそうなので、その後何をやろうか悩んでいます。 今のところ、選択肢は下記の3つなのですが、もし宜しければ、何をやるべきかご助言お願いします。 1,VBA(高校の授業でも少し触れたので、個人的にはこれが一番やりた いです。) 2,他のプログラミング言語 (名称とおすすめの理由を教えて頂きたいです。) 3,他の参考書を買ってVAJAの学習の継続 追記:抽象的な言い方で大変恐縮ですが、プログラミング言語を学習する際、複数の言語を1通り軽く触れるのと、1つの言語をより掘り下げて学習するのではどちらの方がいいのでしょうか。 皆様のご回答、お待ちしております。

  • プログラミング言語の質問です

    プログラミング言語の質問です プログラミング言語を今から勉強しようと思います。 そこで、オブジェクト指向の言語として(というより、今の社会で役立つ言語として)習うべきなのはどの言語でしょうか? 私は候補として、javaとC++を知っていますが、どう違うのかは分かりません。 どちらもCからの派生みたいなことは知っています。 そこで、javaとC++を比較して (1)どう違うのでしょうか?(できることの違い) (2)どちらの方がより優れていると思いますか? 今のところjavaとC++を考えていますが、他の言語の方が良いなら教えてください。 その他、プログラミング言語に関して知っておいたほうが良いことがあれば、 ぜひ教えてください。 回答よろしくお願いします。

  • プログラミング言語の質問です。

    プログラミング言語の質問です。 プログラミング言語を今から勉強しようと思います。 そこで、オブジェクト指向の言語として(というより、今の社会で役立つ言語として)習うべきなのはどの言語でしょうか? 私は候補として、javaとC++を知っていますが、どう違うのかは分かりません。 どちらもCからの派生みたいなことは知っています。 そこで、javaとC++を比較して (1)どう違うのでしょうか?(できることの違い) (2)どちらの方がより優れていると思いますか? 今のところjavaとC++を考えていますが、他の言語の方が良いなら教えてください。 その他、プログラミング言語に関して知っておいたほうが良いことがあれば、 ぜひ教えてください。 回答よろしくお願いします。

  • Cに慣れてしまった人、どのようにJAVAを克服しましたか?

    JAVAについて質問です。 私はC言語をこの1年間勉強してきました。 そしてC言語のコーディングの仕方に慣れきってしまったせいか、どうしてもJAVAのオブジェクト指向 というものが理解できません。 コーディングも上手くいきません。 クラスやメソッドやインスタンスがどうとかコンストラクタが・・・などの横文字が全然意味が分かりません。 C言語で言うとどれがどこに当たるのか!? とかいう風に置き換えて考えようとしても上手く行きません。 こういう、横文字が理解できて、オブジェクト指向の考え方に慣れる為にはどのようにしたらいいでしょうか? また、C言語からプログラミングに入って、後からJAVAを勉強する場合、どのような点に気をつければ良いでしょうか? また、JAVAの克服法を教えてください。

    • ベストアンサー
    • Java
  • Fortranによるオブジェく志向プログラミング

    私は、ずっと、手続き型のプログラミングをやってきて、言語はFortranであり、そのプログラミングの内容は四則計算、ループ、分岐、ファイル入出力みたいなものに限定されていました。 ところが、最近はじめて知ったのですが、Fortranの2003ぐらいになるとオブジェクト指向プログラミングに対応していてクラス、メソッド、インスタンスなどのような概念が出てきたようです(だいぶ前からあったのかもですが、最近まで知りませんでした)。 そこで2つ質問なのですが、従来使っていた手続き型のプログラムはすべて原理的にオブジェクト指向プログラムに移行可能なのでしょうか。無理に移行しなくてもいいとは思いますが、そういう越境のようなことができるのかということですが(手間だけかかって時間の無駄かもしれませんが、訓練という価値はあります)。そして、最終的にはプログラミングというものがすべてオブジェクト指向に収斂してしまうということになるのでしょうか。 もう1つはFortranでオブジェクト指向プログラムができるという場合、バージョンとかそれに応じた仕様とかでその度合いに違いがあるのでしょうか。今までFortranで手続き型のプログラミング(四則計算等)をやっていたのでコンパイラの選択による違いに大差ないという感じでした(あまり方言がないとか)。オブジェクト指向ということになると”これはできるけど、あれはできない”とか際どい問題があるように思います。C++とかJavaの参考書に載っていたようなことがFortranで本当にどこまでできるのかという疑問です。これが明確にならないとただでさえ難しいオブジェクト指向プログラムで私のアルゴリズムにミスがあるのか、アルゴリズムは問題ないけどコンパイラがそれに対応してないという問題の区別がつかなくなると思うのですが。 Fortranのオブジェクト指向の解説本を見たことがないのでお尋ねしました。よろしくお願いします。

  • プログラミングを学びたいが…

    プログラミングの知識は全くありません。 右も左もわからない初心者です。 プログラミングには言語がいくつもありますが、それは、ひとつの基盤になる言語が人それぞれあり、その言語でできないことを他の言語で補うという認識でいいのでしょうか。 もしそうであれば、まずは汎用性の高い言語を学び、他の言語を用途に応じて順に学んでいこうと思っています。 まずは何を学べばよいのでしょうか。

  • javascript new演算子について質問があります。

    javascript new演算子について質問があります。 只今javascript勉強中なのですが、どこかのサイトでnew演算子は悪いパーツとの 記事を読みました。 そこでnew演算子を使用せずにオブジェクト生成の方法を試行錯誤考えてみたのですが (IE用に__proto__もなしで)例えば以下コードはアリなコードでしょうか?? あるいはありえない感じでしょうか?? またnewが悪なのはインスタンスを作る時にnewを付け忘れると、 グローバルな汚染をしてしまうということだけなのでしょうか?? オブジェクトとプロトタイプの理解に苦しんでいるところなので 色々と曖昧なのですが、どなたかどうぞご教授お願い致します。 var obj = {}; obj.method = function(){ this.prop1 = "hoge" return this; }; obj.method.prototype = obj.method(); obj.method.prototype.prop2 = "fuga"; var obj2 = obj.method(); console.log(obj2)