Re: [無用] .call()可省略call

看板Ruby作者 (高 見龍)時間10年前 (2014/06/12 14:58), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/6 (看更多)
※ 引述《AIGecko (壁虎貓耳控)》之銘言: : 偶然忘了打函式只打了小括號 : 發現.()等同.call() : ->(){print "hello, world"}.() #=>hello, world : ->(){print "hello, world"}.call() #=>hello, world : 不只是Proc : 其他物件只要有call這個方法都可以這樣用 : class C : def call : print "hello, world" : end : end : C.new.() #=>hello, world : 這誰會發現啊... : 而且可讀性也不好... 講到這個,當初我在翻 Ruby Source Code 的時候有發現一段: // 檔案:proc.c rb_define_method(rb_cProc, "call", proc_call, -1); rb_define_method(rb_cProc, "[]", proc_call, -1); rb_define_method(rb_cProc, "===", proc_call, -1); rb_define_method(rb_cProc, "yield", proc_call, -1); 所以要執行 proc 的話,上面這四個方法是等義的: p = Proc.new { puts "hello, proc" } p.call p.[] p.=== p.yield 才發現原來有這麼多種執行 proc 的方法 :) -- http://www.eddie.com.tw/ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.70.55.104 ※ 文章網址: http://www.ptt.cc/bbs/Ruby/M.1402556294.A.10D.html
文章代碼(AID): #1JcK-64D (Ruby)
文章代碼(AID): #1JcK-64D (Ruby)