2013-06-06 44 views
3

我是新來的斯卡拉,有點困惑。在經歷「不耐煩的斯卡拉」,並做練習時,我嘗試了一個結果是字符串「Hello」的所有數值的乘積。我首先想到的是要做到以下幾點:爲什麼「Hello」.foldLeft(1)(_。toLong * _.toLong)出錯?

"Hello".foldLeft(1)(_.toLong * _.toLong) 

但是,表達式(_.toLong * _.toLong)獲得了運營商和操作數之間的類型不匹配,一個Int是意料之中的,但它獲得了長。

下面的作品,雖然:

"Hello".map(_.toLong).reduce(_ * _) 

爲什麼使用foldLeft當操作員「*」期待的詮釋,而不是龍?是因爲列表的內容嗎?這些字符是否隱式轉換爲Ints?

謝謝!

+2

是因爲你的初始參數'1'的類型是int嗎?如果將其更改爲「1L」(或等效的Scala),會發生什麼? (作爲評論而不是回答發佈,因爲我不知道斯卡拉,所以這只是一個受過教育的猜測。) – ruakh

+0

是的,就是這樣。好決定。 –

+0

所以你的意思是Scala的*運算符不能乘以一個長整型?哇,那是進步...... – Kaz

回答

5

(促進我的評論一個答案這樣的問題可以關閉。)

這是因爲你最初的說法,1,具有類型Int。您可以通過將其更改爲1L來解決此問題。

相關問題