我试图表示一个不带参数的函数并且不返回任何值(我在JavaScript中模拟setTimeout函数,如果你必须知道的话.)
case class Scheduled(time : Int, callback : => Unit)
Run Code Online (Sandbox Code Playgroud)
不编译,说"`val'参数可能不是按名称调用"
case class Scheduled(time : Int, callback : () => Unit)
Run Code Online (Sandbox Code Playgroud)
编译,但必须奇怪地调用,而不是
Scheduled(40, { println("x") } )
Run Code Online (Sandbox Code Playgroud)
我必须这样做
Scheduled(40, { () => println("x") } )
Run Code Online (Sandbox Code Playgroud)
什么也有效
class Scheduled(time : Int, callback : Unit => Unit)
Run Code Online (Sandbox Code Playgroud)
但是以一种更加明智的方式被引用
Scheduled(40, { x : Unit => println("x") } )
Run Code Online (Sandbox Code Playgroud)
(Unit类型的变量是什么?)我当然想要的是一个构造函数,如果它是一个普通的函数,它可以调用我调用它的方式:
Scheduled(40, println("x") )
Run Code Online (Sandbox Code Playgroud)
给宝宝他的瓶子!
我正在学习Scala并熟悉语法.我看到这Future.apply
需要一个功能作为工作.
以下工作完美:
val future = Future { doWork(1) }
Run Code Online (Sandbox Code Playgroud)
然而,仅仅为了实验,我尝试了其他一些方法来做到这一点,并且都没有适当的工作.
val future = Future(() => doWork(1))
Run Code Online (Sandbox Code Playgroud)
这导致lambda成为未来的完成值,而不是返回值doWork(1)
.
val work: () => Int = () => doWork(index)
val future = Future(work)
Run Code Online (Sandbox Code Playgroud)
这里的情况相同.有人可以解释为什么传递函数作为要完成的工作而不是导致函数实际上成为正在完成的工作的返回值.我也将如何解决这个问题.谢谢!
我对这两个功能之间的区别有疑问:
def getFunction(checkpointPath: String,
sparkConf: SparkConf,
creatingFunc: () => StreamingContext): StreamingContext = {
function body
}
def getFunction(checkpointPath: String,
sparkConf: SparkConf,
creatingFunc: => StreamingContext): StreamingContext = {
function body
}
Run Code Online (Sandbox Code Playgroud)
因此,按名称调用的参数是相同的:
creatingFunc: => StreamingContext
Run Code Online (Sandbox Code Playgroud)
和
creatingFunc: () => StreamingContext
Run Code Online (Sandbox Code Playgroud)
或者没有 ?