case语句是以===而不是==判断的,而
|
你似乎理解错case的用法了。case使用的是===做判断,而非==。要理解清楚这个问题,你首先需要知道“===”只是个“方法”。对于不同的类,它们对===有了不同的定义,也就会有不同的行为。对于普通对象(Object)来说 === 就是 == (请参见http://ruby-doc.org/core-1.9.3/Object.html)而对于Module,这个操作符被重载了。它的行为有点不一样。我还是来具体说一下吧。obj === other → true or false 我简单翻译一下: obj === other 返回true或者false 这里面提到了===会被重载的问题,实际上,Module类就覆盖了===这个方法。在Module类里面,===用于判断指定参数是否为mod的后裔(有点像kind_of?方法)换句话说: RUBY 代码复制
其实你可以这样,涉及到类的时候你 cls/mod == obj 想做: obj.kind_of? cls/mod就可以了。 RUBY 代码复制
|
本帖最后由 SuperMario 于 2013-6-11 00:21 编辑 加个.class 看错了,我还以为你实例化了。你这个直接给变量赋值类的用法,我没用过... |
依照你这样的情况,还是优先选用if判定吧 if判定的自由度比case高,略复杂的判定就不要用case了 |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-11-18 14:44
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.