iT邦幫忙

0

有關Scala的一個問題

請問一下,下面要如何改,才能夠讓 res23: Int = 110
scala> def totalResultOverRange(number: Int, codeBlock: (Int)=>Int=(x)=>2*x )
| : Int = {
| var result = 0
| for ( i <- 1 to number ) {
| result += codeBlock(i)
| }
| result
| }
totalResultOverRange: (number: Int, codeBlock: Int => Int)Int

scala>
| totalResultOverRange(10, t => t )
res23: Int = 55

1 個回答

0
海綿寶寶
iT邦超人 1 級 ‧ 2018-03-16 11:58:05
最佳解答
def totalResultOverRange(number: Int, codeBlock: (Int)=>Int) 
: Int = {
var result = 0
for ( i <- 1 to number ) {
  result += codeBlock(i)
}
result
}

totalResultOverRange(10, t => 2*t )
kmtiger iT邦新手 5 級 ‧ 2018-03-16 12:26:16 檢舉

很感思喔,請問一下有其他解法嗎?

fysh711426 iT邦研究生 5 級 ‧ 2018-03-18 00:28:29 檢舉

提供另一個解,呼叫 totalResultOverRange 函數時不要傳 codeBlock 進去,
使用預設值。

def totalResultOverRange(number: Int, 
    codeBlock: (Int) => Int = (x) => 2 * x)
: Int = {
    var result = 0
    for ( i <- 1 to number ) {
        result += codeBlock(i)
    }
    result
}

totalResultOverRange(10)
kmtiger iT邦新手 5 級 ‧ 2018-03-18 09:58:55 檢舉

感恩喔,這也是我想知道的。

我要發表回答

立即登入回答