2013-11-26 32 views
0

我需要在Scala中编写一个覆盖toString方法的方法。我写了它,但我也必须检查,如果有一个是'1'的元素,我会将其更改为'a',否则就像使用字符串方法一样编写列表。任何建议如何做到这一点?字符串方法来更改Scala中的特定元素

+0

出于好奇,你正在上哪个班级?如果这是编程初学者的课程,它似乎有一个陡峭的曲线。 –

+0

是的,它是功能性编程和Scala的初学者课程 – user2947615

+0

现在是时候超越单线程了。将其分解为多个val或defs,以便您可以看到问题出在哪里。副手,我想第二个“名单”需要被排除在外。请记住,'map'不会更改原始列表 - 它会创建一个新列表。此外,我怀疑,从错误中,你正在被列出一份清单,但你没有足够的分享来确认。 –

回答

0

你有什么错误?似乎为我

val l = List(1, 2, 3) 
println(this) 

override def toString(): String = { 
    val t = l.map({ 
    case 1 => "a" 
    case x => x 
    }) 
    t.toString 
} 

工作进展List(a, 2, 3)打印出来

0

我从你的问题的意见看到,listList[List[Int]]

看看你的代码的开头:

list.map { case 1 => 'a'; case x => x} 

map期望一个函数,它的list元素作为一个参数 - 一个List[Int],你的情况。但是你的代码直接在Int上运行。

有了这些信息,看起来你得到的错误是完全正确的:你声明了一个方法,期望Int,但你传递一个List[Int]给它,这实际上是一个类型不匹配。

试试这个:

list.map {_.map { case 1 => 'a'; case x => x}} 

这样,您就定义转换1到离开一切其他单独应用于list的子列表的功能,而这种类型的检查:你申请一个函数,期望IntInt

相关问题