类型不匹配; found:需要字符串:Int

时间:2018-01-31 14:32:40

标签: string

我编写了一个使用函数式编程风格处理字符串的程序。它给出了奇怪的#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 _ 

}

2 个答案:

答案 0 :(得分:1)

helper1(s(str), s.drop(1))

在代码s(str)中,您正在调用String.apply(Int)方法。 strString,因此编译器会通知它

答案 1 :(得分:1)

问题是您已在两个不同的范围中声明s。在整个范围中,您已将s声明为一个作用于String并返回String的方法。在helper1()的范围内,您还将s声明为String参数。此声明会覆盖(隐藏)s之外的方法helper1()的声明。

如果报告错误,您尝试使用方法s(str),但编译器正在获取声明s:String。您应该通过重命名方法或参数的名称来解决此问题。一般来说,我建议避免使用方法,参数或变量的单个字符名称,而是使用更长和更具描述性的名称 - 这不是解决此问题的必要条件,但您可能更有可能通过使用,例如, sorted()