2016-11-19 13 views
2

私は暗黙的なクラスでいくつかの実験を行っており、次の問題が出てきました。ここでは、次のとおりです。Scalaで括弧を省略しています

object Main extends App { 
    implicit class IntExtractor(str: String){ 
    def extractInt(i: Int): Int = i + str.## 
    } 

    implicit class ArrayCreator(i: Int){ 
    def -->(ii: Int): Array[Int] = Array[Int](i, ii) 
    def createArray(ii: Int): Array[Int] = Array[Int](i, ii) 
    } 

    "STR" extractInt 10 createArray 11 //fine 
    ("STR" extractInt 10) --> 11   //fine 
    "STR" extractInt 10 --> 11   //compile-error 
} 

DEMO

何が-->方法で例をコンパイルしていない理由は?私は-->Scalaの完全に有効な識別子だと思いました。他の識別子と同様です。 Scalaで

+1

そして ' - >'は最初の例を使っているので、問題は ' - >'ではないことを知るべきです。問題はそれらの 'カッコ 'がないことにある。 –

+0

@SarveshKumarSinghはい、私の悪いです。それは実際に簡単です。ありがとうございました。 –

+3

Scalaは他のほとんどの言語と同様に、右側から式を評価し始めます。したがって、優先順位が等しい「演算子」の場合、最初に右のものが評価されます。あなたの '' STR "extractInt 10 - > 11'は' 'STR" extractInt(10 - > 11) 'として扱われ、' 'extractInt''は' - > 'の結果を得ます。引数としての配列です。しかし、 'extractInt'はコンパイルエラーにつながる' Int'を期待しています。 –

答えて

6

演算子の優先順位ここで説明したように1その名前の最初のシンボル/キャラクタに依存して、優先順位が

  • である(すべての文字)
  • |
  • ^
  • &
  • =!
  • <>
  • -
  • */%
  • :
  • +(他のすべての特殊文字)"STR" extractInt 10 --> 11"STR" extractInt (10 --> 11)番目として解析されながら、なぜ"STR" extractInt 10 createArray 11("STR" extractInt 10) createArray 11として解析されています

コンパイルエラーが発生します。

関連する問題