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

作者: danny8376 (釣到一隻猴子@_@)   2014-06-12 17:40:00
※ 引述《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內部運作的概念啊
所有東西都是運算子
像是a+b
實際狀況是 => a.+(b)
也就是呼叫了a當中的+這個方法去跟b處理
method()
同樣也可以是 => method.()
反倒概念上call是()的別名正確一點XD
雖然在實際上也不是這樣就是XDDD
作者: AIGecko (師大貓耳控)   2014-06-12 18:16:00
已知運算子可以改成函式寫法 不過直接()還真想不到測試過不能直接定義() 應該有特別設計過??
作者: alog (A肉哥)   2014-06-14 20:54:00
保留字怎麼定義= =如果可以定義() 其他語法都掛了
作者: uranusjr (←這人是超級笨蛋)   2014-06-16 00:29:00
嗯?C++ 表示:
作者: AIGecko (師大貓耳控)   2014-06-16 01:23:00
改天拿C版本的API來定義看看 或許可以
作者: alog (A肉哥)   2014-06-16 10:30:00
不要再挑戰ruby的直譯器啦XDDDD
作者: hcmlinj (接米)   2014-06-16 21:08:00
Matz表示:______
作者: tonytonyjan (南洋大兜蟲)   2014-08-29 12:30:00
"括號並不是一個方法"*3

Links booklink

Contact Us: admin [ a t ] ucptt.com