2013-11-26 31 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

相關問題