作者aquarianboy (高 见龙)
看板Ruby
标题Re: [无用] .call()可省略call
时间Thu Jun 12 14:58:09 2014
※ 引述《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://webptt.com/cn.aspx?n=bbs/Ruby/M.1402556294.A.10D.html