作者danny8376 (釣到一隻猴子@_@)
看板Ruby
標題Re: [無用] .call()可省略call
時間Thu Jun 12 17:40:00 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內部運作的概念啊
所有東西都是運算子
像是a+b
實際狀況是 => a.+(b)
也就是呼叫了a當中的+這個方法去跟b處理
method()
同樣也可以是 => method.()
反倒概念上call是()的別名正確一點XD
雖然在實際上也不是這樣就是XDDD
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.216.102
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Ruby/M.1402566004.A.49A.html
1F:推 AIGecko:已知運算子可以改成函式寫法 不過直接()還真想不到 06/12 18:16
2F:→ AIGecko:測試過不能直接定義() 應該有特別設計過?? 06/12 18:17
3F:→ alog:保留字怎麼定義= = 06/14 20:54
4F:→ alog:如果可以定義() 其他語法都掛了 06/14 20:54
5F:→ uranusjr:嗯?C++ 表示: 06/16 00:29
6F:推 AIGecko:改天拿C版本的API來定義看看 或許可以 06/16 01:23
7F:→ alog:不要再挑戰ruby的直譯器啦XDDDD 06/16 10:30
8F:推 hcmlinj:Matz表示:______ 06/16 21:08
9F:→ tonytonyjan: "括號並不是一個方法"*3 08/29 12:30