[問題] 如何呼叫不同method?

看板Ruby作者 (haha)時間9年前 (2014/10/19 06:38), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
正在練習寫兩個method, 一個把參數都相加, 一個是相減 比方 add(5,7,9)會傳回21, 而subs(5,7,9)會傳回-11 可是在subs()裡面要如何呼叫add()呢? 謝謝! def add(*numA) numA.reduce(:+) end def subs(*numS) numS.shift - numS.reduce(:+) #這行寫成numS.shift - add(numS)就出錯了 #irb抱怨TypeError: Array can't be coerced into Fixnum end 這參數都是array啊, 怎麼會是Fixnum? 怎樣修改較佳? 感恩!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 73.170.130.51 ※ 文章網址: http://www.ptt.cc/bbs/Ruby/M.1413671913.A.F45.html

10/19 08:39, , 1F
你理解錯了,他是在說add丟回來的是Array
10/19 08:39, 1F

10/19 08:42, , 2F
用不定參數會把所用參數包成一個Array,只有一個也會
10/19 08:42, 2F

10/19 08:43, , 3F
變成你subs裡的add 實際上收到一個Array參數而已
10/19 08:43, 3F

10/19 08:44, , 4F
結果就是包了一個Array的Array做reduce回一個Array
10/19 08:44, 4F

10/19 08:44, , 5F
又Fixnum的-方法不給減Array就噴了
10/19 08:44, 5F

10/19 09:17, , 6F
!!為何add丟回array?明明[5,7,9].reduce(:+).class是Fixnum
10/19 09:17, 6F

10/19 09:27, , 7F
終於看懂你的意思了謝謝, 原來在subs裡我該用 add(*numS)
10/19 09:27, 7F
文章代碼(AID): #1KGklfz5 (Ruby)