scala - 在 Scala 函数中按名称参数调用

标签 scala

我有一个关于这两个函数之间区别的问题:

def getFunction(checkpointPath: String,
                  sparkConf: SparkConf,
                  creatingFunc: () => StreamingContext): StreamingContext = {
    function body
  }


def getFunction(checkpointPath: String,
                  sparkConf: SparkConf,
                  creatingFunc:  => StreamingContext): StreamingContext = {
    function body
  }

所以 called by name 参数是相同的:

creatingFunc:  => StreamingContext 

creatingFunc: () => StreamingContext

还是不?

最佳答案

两者不一样。第一种情况指定方法参数是按名称调用

creatingFunc:  => StreamingContext 

而第二种情况指定按值传递方法参数,其中参数恰好是 () => StreamingContex 类型的函数

creatingFunc: () => StreamingContext

例如,考虑以下两种方法

def foo(arg: () => String) = ""
def foo(arg: => String) = ""

然后

foo(() => "") // resolves to call first foo
foo("")       // resolves to call second foo

关于scala - 在 Scala 函数中按名称参数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56428611/

相关文章:

scala - 为什么不扩展其他类的类必须从特征扩展? (与不起作用)

Scala:序列差异

scala - json4s 总是转义 unicode 字符 €

scala - 如何将DataFrame直接保存到Hive中?

scala - 如何将 Scala 编译器选项附加到 sbt 中的 scalacOptions 中?

java - 使用 pickling 将 json 对象数组解析为 scala 对象

java - 在 Scala 中从 java.util.Set 构造一个 java.util.List

scala - 在更复杂的计算中使用 scalaz 状态

Scala 子类型不被接受

scala - 如果函数可以是不同的类型,单子(monad)规则将如何应用