我试图编写一个尾部递归函数来反转字符串,这是代码,出于某些原因,我不确定模式匹配条件是否阻止它获取反转的字符串作为输出
def revstring(str:String):String={
@tailrec
def rev(str:String,r:String):String={
str match{
case s if s.head==null =>null
case x if x.tail.isEmpty => ""
case _=> rev(str.tail, str.head +r)
}
}
rev(str,"")}println(revstring("Mississipi"))
}
答案 0 :(得分:3)
s.head
永远不会为null。如果字符串为空(或者为null,则绝不应该-null应该永远不会真正出现在scala代码中),它将引发异常。
另外,您返回的时间还太早-x.tail.isEmpty
表示您还需要处理一个字符。
最后,您总是返回""
而不是实际结果。
类似的事情应该起作用:
str match {
case "" => r
case s => rev(s.tail, s.head + r)
}
如评论中所述,像这样操作字符串不是很有效。因此,在现实生活中,您可能希望将其转换为列表,反转列表,然后.mkstring
将其放回原处。