繁体   English   中英

难以理解函数语法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM