我能理解这一点:
scala> def f(i: Int) = "dude: " + i
f: (i: Int)java.lang.String
scala> f(3)
res30: java.lang.String = dude: 3
它定义了一个函数f,它接受一个int并返回一个dude形式的字符串:+传入的int。
现在可以像这样指定相同的功能:
val f: Int => String = x => "dude: " + x
scala> f(3)
res31: String = dude: 3
=>
String = x
是什么意思?我想当你想在Scala中定义一些东西时,你会做x:String
?答案 0 :(得分:10)
您应该将其解析为
val (f: Int => String) = (x => "dude: " + x)
因此它指定f具有类型(Int => String)
并且被定义为匿名函数,该函数接受Int
参数(x)
并返回String
。
答案 1 :(得分:6)
只是澄清了一下。 def
语句定义方法,而不是函数。
现在,为了这个功能。你可以这样写:
val f: (Int => String) = x => "dude: " + x
它可以被读作“f是从Int到String的函数”。因此,回答您的问题时,类型位置中的=>
表示从类型到类型的函数,而值位置中的=>
表示参数identifier
并返回expression
。< / p>
此外,它还可以依赖类型推导者:
val f = (x:Int) => "dude: " + x
答案 2 :(得分:3)
Lee和pedrofurla都给出了很好的答案。我还要补充一点,如果你想将你的方法转换为一个函数(作为参数传递,用作部分应用的函数等),你可以使用神奇的下划线:
def foo(i: Int) = "dude: " + x
val bar = foo _ // now you have a function bar of type Int => String