这是一个Scala会话,它定义并尝试了一些函数:
scala> def test1(str: String) = str + str;
test1: (str: String)java.lang.String
scala> test1("ab")
res0: java.lang.String = abab
Run Code Online (Sandbox Code Playgroud)
很好地工作.
scala> val test2 = test1
<console>:6: error: missing arguments for method test1 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
val test2 = test1
^
Run Code Online (Sandbox Code Playgroud)
哎呀.
scala> val test2 = test1 _
test2: (String) => java.lang.String = <function1>
scala> test2("ab")
res1: java.lang.String = abab
Run Code Online (Sandbox Code Playgroud)
效果很好!
现在,我已经看到_折叠时的语法(_ + …
可能重复:
Scala中的函数与方法Scala中
def foo = {}和def foo()= {}之间的区别是什么?
在scala我们可以定义
def foo():Unit = println ("hello")
Run Code Online (Sandbox Code Playgroud)
要么
def foo:Unit = println ("hello")
Run Code Online (Sandbox Code Playgroud)
我知道它们不一样但有什么区别,哪些应该在什么时候使用?
如果之前已经回答过,请指出我的链接.
我是Scala的新手,我遇到了解问题.为什么有两个相同概念的语法,并且没有一个更有效或更短(仅从打字的角度来看,也许它们的行为不同 - 这就是我所要求的).
在Go中,类比具有实际差异 - 您无法正向引用分配给变量的lambda,但您可以从任何地方引用命名函数.如果我理解正确的话,Scala会混合这两个:你可以转发任何变量(如果我错了请纠正我).
请注意,这个问题并不重复定义函数的"def"和"val"之间有什么区别.
我知道每次引用/调用def后=都会对表达式进行求值,并且val只有一次.但这是不同的,因为val定义中的表达式求值为函数.
这个问题涉及Scala的语法,并没有直接询问函数和方法之间的区别.尽管答案内容可能相似,但在此网站上清除这一确切点仍然很有价值.
我正在学习我大学的编程范例,并阅读讲师提供的这门课程材料:
val double = (x: Int) => 2 * x
double: Int => Int = <function1>
Run Code Online (Sandbox Code Playgroud)
但是从我自己的研究中我发现并习惯于定义相同的函数:
def d (x: Int) = 2 * x
d: (x: Int)Int
Run Code Online (Sandbox Code Playgroud)
我是Scala的新手.这两个定义都给出了以下结果:
res21: Int = 8
Run Code Online (Sandbox Code Playgroud)
在4作为参数传递时.现在我的主要问题是为什么讲师更喜欢val用来定义一个函数?我认为它更长,并不是真正必要的,除非使用val提供了一些我不知道的额外优势.除了我理解使用val使一些名称占位符所以稍后在程序中,我可能会错误地写val double = 5,功能将消失!在这个阶段,我非常确信我学会了一种更好的定义函数的方法,除非有人告诉我.
我正在阅读这个页面,我在scala中遇到了这个函数定义:
def upper: String => String = _.toUpperCase
Run Code Online (Sandbox Code Playgroud)
尝试后,似乎它的工作方式与此相同:
def upper = (str: String) => str.toUpperCase()
Run Code Online (Sandbox Code Playgroud)
两个功能都一样吗?如果是这样,我如何阅读上述功能(第一个)?这种定义定义的方式有特定的名称吗?