Re: [無用] .call()可省略call
※ 引述《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
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章