为什么这样做?
index = 0
for item in myList:
myList[index] = item.strip()
index += 1
for item in myList:
print "'"+item+"'"
虽然这个没有。
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
不应该使代码短路而不能继续前进吗?我觉得有一个简单的解释,为什么第二个代码片段不起作用,但我似乎无法找出原因。
答案 0 :(得分:2)
首先,您错过了return
声明。在Scala中,函数最后一行的值将作为返回值返回。
现在你的第一个代码段是有效的,因为if else语句被视为一个表达式,因此你有一个表达式作为要返回的最后一行。
在你的第二个代码片段中,前两个ifs没有效果,因为没有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"))
}