锁定老帖子 主题:ruby处理未定义的方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-10-09
fansofjava 写道 嗯,用RUBY_VERSION与RUBY_PLATFORM来判断的话,可读性是好要一些,就拿上面的代码来说:
undef id, type if ?? == 63 大概等价于 undef id, type unless RUBY_VERSION =~/1.9/ 当然这个也不太准确,毕竟以后肯定会有2.0的。 可以用大于。。 |
|
返回顶楼 | |
发表时间:2010-10-09
最后修改:2010-10-09
Hooopo 写道 本来要做的事情就是抛异常,raise是最直观的方法~
而用super是在绕弯弯。。把简单的问题复杂化,举个例子,如果Hash又自己定义了method_missing会怎样? 至于是不是习惯用法,至少matz没这么用(见ruby标准库中ostruct.rb实现) 果然. def method_missing(mid, *args) # :nodoc: mname = mid.id2name len = args.length if mname =~ /=$/ if len != 1 raise ArgumentError, "wrong number of arguments (#{len} for 1)", caller(1) end if self.frozen? raise TypeError, "can't modify frozen #{self.class}", caller(1) end mname.chop! self.new_ostruct_member(mname) @table[mname.intern] = args[0] elsif len == 0 @table[mid] else raise NoMethodError, "undefined method `#{mname}' for #{self}", caller(1) end end 虎跑好牛逼啊. |
|
返回顶楼 | |