我正在编写一些代码,所以我想保留一个未实现的方法,我正在调用该方法,但该路径流未根据我提供的输入命中。该方法看起来像这样
object HbaseStore {
def get() = _
}
但是上面的代码抛出了异常
HbaseStore.scala:24: error: unbound placeholder parameter
[INFO] def get() = _
但是当我用 ???
替换 _
时,代码执行成功。我只是想知道这两者之间有什么区别。据我所知,_
提供默认值,所以我假设它会在这里定义一个空函数并返回 Nothing
。
最佳答案
_
是一种占位符语法,用于绑定(bind)值。占位符语法用在很多场景中,例如:
如果是列表:
val x = List(1,2,3,4,5)
//To print each value we can do:
x.map(res => println(res))
//Now, we can use placeholder syntax to bind res value.
x.map(println(_))
模式匹配:
val x = "some value"
x match {
case x:String => //convert to lowercase and print.
case res@_ => //here, type doesnot matter I just want to get that value and print as it is. println(res)
因此,基本上,如果您想在不知道其类型的情况下获得值,则可以使用占位符语法。
另一方面,???
被分配给方法或变量作为值,以防您不想提供实现。
例如def doSomething() => ???
此处,doSomething()
方法未实现,您需要稍后提供或重写实现。请注意,您不能在没有实现的情况下使用变量/方法,如果您尝试调用它,您将获得异常。例如doSomething()
在上述情况下会失败。
关于scala - scala中下划线(_)和三重问号(???)的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44128061/