新手问题 想在老版本的 Ruby 里用 define_singleton_method,可以自己写吗

ad583255925 · 2017年05月04日 · 最后由 xaqi 回复于 2017年05月06日 · 1322 次阅读

不能用的时候才觉得这个东西真好用,项目比较老,1.8.7 的 define_singleton_method 貌似是 1.9 才有的

理论上可行。不过 Object#define_singleton_method 是 C 的实现,所以你可能需要 ffi。

但,为什么不直接升级到 2.0

对啊,ruby 在这方面做的很好啊,又没有 break change

define_singleton_method 最终也是调用 define_method,找到 singleton class 就 OK 吧。。。

mingyuan0715 回复

1.8.7 到 1.9,满满的 break changes。

msg7086 回复

哈哈,没用过 1.8,我是从 1.9.3 开始接触 ruby 的

mingyuan0715 回复

当年就是 1.8 到 1.9 升级 break 了太多东西以至于后来 Ruby 都不敢随便乱来了,这才有了 1.9 到 2.3 的平滑升级路径。

最大的 break 在于整个字符串系统重新搞了,从 byte[] 转成了 char[],于是所有的对字符串内元素的读写操作全都要重写……

msg7086 回复

长见识了,哈哈

没用过 1.8,这样可以吗?

class Object
  def define_singleton_method(name, &block)
    singleton_class.send(:define_method, name, block) 
  end
end

需要 登录 后方可回复, 如果你还没有账号请 注册新账号