看板 Ruby 關於我們 聯絡資訊
※ 引述《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