※ 引述《PsMonkey (痞子軍團團長)》之銘言:
[恕刪]
: 怪了... 這麼說,Ruby 不用再記憶體當中 new 新的物件就可以回傳東西?
: (連那個 Array 都不用 new?)
ㄜ,這個例子的確是有 new 一個 Array
但是,這是 Ruby 幫我們 new
我可沒有手動去 key new 這個字 ( 人不是我殺的 )
就這個範例來看
def a
return 1 , "haha"
end
puts a().object_id
puts a().object_id
puts a().object_id
答案是
538238774
538238744
538238714
看到三次的 object id 都不一樣
可見每次呼叫 a 這個 method
他都會另外先 new 一個 array object,然後回傳給我們
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.103.127
> -------------------------------------------------------------------------- <
作者: Schelfaniel (Test) 看板: Ruby
標題: [閒聊] Ruby 傳入值及傳回值的 ,
時間: Sat Aug 19 21:18:09 2006
def test1234
return 1, 2, 3, 4
end
如果用一個值去接
a = test1234
則為陣列 a = [1, 2, 3, 4]
如果要只抓第一個參數時使用 a = test1234[0]
如果用二個值去接
a,b = test1234
則為單值 a = 1, b = 2
超過數量的的值為 nil
a,b,c,d,e,f = test1234
則 a = 1, b = 2, c = 3, d = 4, e =nil, f = nil
題外話 : 比較 ( Common Lisp 部份 )
Common Lisp 中用單值去接時, 並不會得到陣列, 而是第一個值
如 floor(除法), 會傳回兩個值, 商和餘數
(setq a (floor 10 3)) ; 10 除以 3 的商數為 3, 所以 a 是 3
那要怎麼抓到第二個值呢? 要用一個怪指令 @_@
(multiple-value-setq (a b) (floor 10 3)) ; a = 3, b = 1(餘數)
這指令還真長 @_@
如果要將兩個值, 轉為 list 的話
(setq a (multiple-value-list (floor 10 3))) ; a = (3 1)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.169.205.162