我编写了一个使用函数式编程风格处理字符串的程序。它给出了奇怪的#34;类型不匹配;
发现:字符串
要求:Int"此行else if(c==('s')) helper1(s(str), s.drop(1))
上的错误。提前谢谢。
def stringpipeline(string:String) : (String) => String = {
def r(s:String):String = {s.reverse}
def s(s:String) = {s.sorted}
def U(s:String) = {s.toUpperCase}
def l(s:String) = {s.toLowerCase}
def star(s:String):String = {s.trim}
def T(s:String):String = {s.split(' ').map(_.capitalize).mkString(" ")}
def helper1(str:String, s:String): String = {
if (s.length != 0)
{
val c = s(0)
if(c==('T')) helper1(T(str), s.drop(1))
if(c==('s')) helper1(s(str), s.drop(1))
if(c==('*')) helper1(star(str),s.drop(1))
else str
}
else str
}
def helper2(strn:String): String = {helper1(strn,string)}
helper2 _
}
答案 0 :(得分:1)
helper1(s(str), s.drop(1))
在代码s(str)
中,您正在调用String.apply(Int)
方法。 str
是String
,因此编译器会通知它
答案 1 :(得分:1)
问题是您已在两个不同的范围中声明s
。在整个范围中,您已将s
声明为一个作用于String并返回String的方法。在helper1()
的范围内,您还将s
声明为String参数。此声明会覆盖(隐藏)s
之外的方法helper1()
的声明。
如果报告错误,您尝试使用方法s(str)
,但编译器正在获取声明s:String
。您应该通过重命名方法或参数的名称来解决此问题。一般来说,我建议避免使用方法,参数或变量的单个字符名称,而是使用更长和更具描述性的名称 - 这不是解决此问题的必要条件,但您可能更有可能通过使用,例如, sorted()
。