[英]Difficulty understanding function syntax
我能理解这一点:
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
吗? 你应该把它解析为
val (f: Int => String) = (x => "dude: " + x)
因此它指定f具有类型(Int => String)
并且被定义为匿名函数,该函数接受Int
参数(x)
并返回String
。
只是澄清了一下。 def
语句定义方法,而不是函数。
现在,为功能。 你可以这样写:
val f: (Int => String) = x => "dude: " + x
它可以被解读为“f是从Int到String的函数”。 所以,回答你的问题,a =>
在一个类型的位置意味着函数从一个类型到另一个类型,而=>
在一个值的位置意味着获取参数identifier
并返回expression
。
此外,它还可以依赖于类型推导者:
val f = (x:Int) => "dude: " + x
李和pedrofurla都给出了很好的答案。 我还要补充一点,如果你想将你的方法转换为函数(作为参数传递,用作部分应用函数等),你可以使用魔术下划线:
def foo(i: Int) = "dude: " + x
val bar = foo _ // now you have a function bar of type Int => String
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.