11

次の点を考慮してください。

def f(implicit a: String, y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))

最後の式により、次のエラーが発生します。

not enough arguments for method f: (implicit a: String, implicit y:
Int)java.lang.String. Unspecified value parameter a.

ただし、暗黙的なパラメーター a に既定値を指定しても問題はありません。

def f(implicit a: String = "haha!", y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))

しかし、最後の行は印刷されます

haha!: 2

私が期待していたであろう間

size: 2

したがって、暗黙の値「s」は取得されません。代わりに f にパラメータを指定せず、単に呼び出す場合

println(f)

次に、暗黙の値が取得され、取得します

size: 0

誰かがここで何が起こっているのかを明らかにできますか?

4

3 に答える 3

4

暗黙的なパラメーターは、最初に、メソッド定義の最後に、2 番目に別々に配置する必要があります。このような:

def f(y: Int = 0)(implicit a: String) = a + ": " + y
implicit val s = "size"
println(f(y = 2))

出力

size: 2
于 2013-01-07T11:41:44.573 に答える
0

jsuerethが言ったことに沿って、関数を次のように定義できます。

def f(a: String = implicitly, y:Int = 0) = a + ": " + y

または私が見ることに慣れている方法で、

def f(y:Int = 0)(implicit a: String) = a + ": " + y
于 2012-02-23T22:02:14.423 に答える