scala - scala中下划线(_)和三重问号(???)的区别

标签 scala syntax

我正在编写一些代码,所以我想保留一个未实现的方法,我正在调用该方法,但该路径流未根据我提供的输入命中。该方法看起来像这样

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/

相关文章:

scala - 在 scala 中以参数方式保存闭包的数据结构

sql - Spark、scala 和 jdbc - 如何限制记录数量

arrays - 在 HDL 中处理数组

syntax - 为什么不推荐使用 yield 的箭头符号?

javascript - localStorage.getItem ('item' ) 比 localStorage.item 或 localStorage ['item' ] 更好吗?

php - iWork - 导致 index.html 文件出现问题

scala - 为什么我无法在读取 xml 和过滤器时根据此条件进行过滤

scala - 如何对两个数据帧中的列进行分组,然后在行之间应用聚合差异函数?

scala - 使用 Scala Akka 框架来阻止 CLI 调用

Java根据字符是否已经存在将字符添加到 map