为什么不返回应有的值?

aa8y

为什么这样做?

object Foo extends App {
  def bar(s: String): String = {
    if (s.size == 0) "empty string"
    else if (s.size == 1) s + s
    else s.head + bar(s.tail)
  }

  println(bar(""))
  println(bar("s"))
  println(bar("soom"))
}

[info] Running example.Foo
empty string
ss
soomm

虽然这不是。

object Foo extends App {
  def bar(s: String): String = {
    if (s.size == 0) "empty string"
    if (s.size == 1) s + s
    s.head + bar(s.tail)
  }

  println(bar(""))
  println(bar("s"))
  println(bar("soom"))
}

java.util.NoSuchElementException: next on empty iterator

难道不应该return使代码短路而不前进吗?我觉得对于第二个代码段为什么不起作用有一个简单的解释,但是我似乎找不到原因。

瑞安·斯图尔(Ryan Stull)

首先,您缺少return陈述。在Scala中,函数最后一行的值作为返回值返回。

现在,您的第一个代码段有效,因为if else语句被视为一个表达式,因此您确实有一个表达式作为要返回的最后一行。

在您的第二个代码段中,前两个if无效,因为没有return语句。他们被评估,然后什么也没有发生。您的空字符串大小写将导致该s.head + bar(s.tail)行失败,因为.head找不到元素。

您可以使用第一个代码段,也可以将第二个代码段更改为此。

object Foo extends App {
  def bar(s: String): String = {
    if (s.size == 0) return "empty string"
    if (s.size == 1) return s + s
    s.head + bar(s.tail)
  }

  println(bar(""))
  println(bar("s"))
  println(bar("soom"))
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

`fft`不返回应有的内容

为什么我的AJAX请求打开我的PHP文件,而不是仅仅返回应有的响应文本?

ADA-使用模式搜索目录-不返回应有的状态

getElementById不会返回应有的内容

哪里有案例-为什么这不返回其应有的结果

为什么 Selenium driver.find 命令返回的列表是它应有的两倍?

Node.js Promise仅返回应有的一部分

为什么我的状态计数器比它应有的值高?

为什么输出是应有的一半?

Python:为什么我的base64文件名编码不匹配应有的格式?

为什么Go的encoding / xml.Decoder.Token()不产生应有的xml.Attr令牌?

为什么此函数返回(拥有的)值?

为什么我的NumPy数组占用的内存比应有的少*?

为什么浮点数比应有的精确度高?

为什么我的CIFAR-10字典键与应有的键不同?

为什么这个函数不能像应有的那样向ArrayList添加项目?

为什么我的JS正则表达式比应有的匹配更多?

CountDownTimer为什么不应该在应有的时候启动onTick?

为什么我所有的 BST 遍历都按顺序返回值?

SQL查询返回的记录少于应有的数量

Laravel-为什么json响应有时返回数组有时是对象

两个值不会产生应有的商

为什么不返回值?

为什么查询不返回值

为什么地图不返回其值?

为什么 main() 不返回任何值?

函数不返回值,为什么?

为什么我的构造函数不像应有的那样初始化其超类属性?

为什么我的 Cloud Function 设置的时间比应有的时间提前一小时?