精華區beta Ruby 關於我們 聯絡資訊
※ 引述《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