2016-06-13 16 views
1
for (i <- 0 to 1; c <- 0 until str.length) { 
    print(c + i).toChar 
} 

for (i <- 0 to 1; c <- 0 until str.length) yield (str(c) + i).toChar 

上記の最初のコードスニペットを実行すると、エラー:value toChar is not a member of Unitが発生します。しかし、yieldを使って2番目のコードスニペットを実行すると、エラーは消えてしまいます。これは、最初のコードスニペットでblock statementstatement print(c+i)Unitの値とtoCharと呼ばれる機能を持っていませんUnitデータ型を返すためtoCharは値ではありません

ですか? Scalaのblock statementで何かがUnitを返すときに苦労しています。

答えて

2

<fn>()ためです - 関数呼び出し演算子が<obj>.<field/method>その高い優先順位がある - フィールドやメソッドにアクセスするので、Scalaはあなたが呼び出したいと考えてprint(c + i) => Unit次にUnit.toChar

+0

オハイオ州は完全に意味をなさない。それは私が愚かであったことを認識していない...私は文法で遊んでみるためにとても窮地に陥っていたと思う。ありがとうございました! – LP45

2

print関数はそう、Unitを返す:

print(c + i).toChar 

は(存在しない)UnitためtoChar方法を見つけることを試みています。

あなたはこの内部の印刷を実行する必要があります。

print((c + i).toChar) 
# equivalently 
print(c + i toChar) 
+0

かっこ内で行うことの意義は何ですか?それはそれが価値を返すようにですか?私はJavaとC++のバックグラウンドから来て、Scalaではいくつかのことを理解できません。 – LP45

+1

JavaとC++の場合とまったく同じ*です。最初のケースでは、 'print'の戻り値(' Unit'を返します。これは基本的に意味のある戻り値がないことを示す値です)に対して 'toChar 'を呼び出します.IOW、Javaでは' print'何も返さない 'void'メソッドですが、Scalaではすべてのメソッドが何かを返すので、' print'は「何かを返していません」というものを返します。 2番目のケースでは、 'c + i'の結果に対して' toChar'を呼び出し、 'toChar'の戻り値を' print'します。これはScalaに特有のものではなく、すべての言語で動作します。 –

+0

'(c + i).toChar'は' c + i toChar'と同じではありません – sschaef

関連する問題