作者danny8376 (钓到一只猴子@_@)
看板Ruby
标题Re: [无用] .call()可省略call
时间Wed Jun 18 02:57:31 2014
※ 引述《CindyLinz (Cindy Wang)》之铭言:
: 好奇想问一下为什麽会把 === 也定义进去啊?
: 吃掉了OwO
: 可是.. === 是什麽情况用会看起来顺啊?
: 把 Proc 视为一个 lazy deferred 的 value 吗?
: 如果写 thunk === 3 就是用来检查这个 thunk 里面的 value 是不是 3?
: 只是如果真是这样的想法的话,
: 那麽其他的 + - * / 也都可以用同样的理由定义进去才对呀?
Ruby里的===并不是一个会被直接呼叫使用的运算子
本身也不是跟==这种equal有直接关系的运算子
Ruby的===是case专用的内部运算子
意义上比较接近in range/type of的感觉吧?
when放了num/string之类的就跟==一样
when放了range 就是in range check
when放了regex 就是检测字串是否匹配
when放了class 代表是这class的instance时怎样
...
当放了block(proc, lambda)的时候
就是把block本身当作判断式去执行
而这个block自身就必须要有一个参数传入(when判断对象)
而其应该要回传true/false来回报是否匹配
Ex.
http://ideone.com/59UrnO
==============================================
[] 顺便补充下
Ruby里几乎所有instance都能有[]系列运算子
(常用的singleton外,还有各种方法可以硬塞)
而Proc会用[]大概就想仿阵列一类的用法去呼叫Proc
Ex.
http://ideone.com/eXu69l
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.115.216.102
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Ruby/M.1403031456.A.24C.html
※ 编辑: danny8376 (140.115.216.102), 06/18/2014 03:12:02
1F:推 AIGecko:singleton写法 class<<C;def [];end;end 轻松定义~~ 06/18 03:44
※ 编辑: danny8376 (140.115.216.102), 06/18/2014 03:55:51
2F:推 aquarianboy:是的,在 case..when 的时候 === 会被呼叫到 :) 06/18 13:25
3F:推 CindyLinz:懂! 谢谢 ^^ 06/18 20:21