论坛首页 编程语言技术论坛

ruby处理未定义的方法

浏览 5678 次
精华帖 (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的。

可以用大于。。
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

虎跑好牛逼啊.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics