所以我理解你不应该直接将Fixnum,Float或Integer子类化,因为它们没有#new方法.使用DelegateClass似乎工作,但它是最好的方法吗?有谁知道这些课没有#new背后的原因是什么?
我需要一个类似Fixnum的类,但有一些额外的方法,我希望能够self从类中引用它的值,例如:
class Foo < Fixnum
def initialize value
super value
end
def increment
self + 1
end
end
Foo.new(5).increment + 4 # => 10
Run Code Online (Sandbox Code Playgroud)
Yeh*_*atz 17
您可以自己轻松地设置快速转发实现:
class MyNum
def initialize(number)
@number = number
end
def method_missing(name, *args, &blk)
ret = @number.send(name, *args, &blk)
ret.is_a?(Numeric) ? MyNum.new(ret) : ret
end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以在MyNum上添加你想要的任何方法,但是你需要在这些方法中使用@number,而不是直接调用super.
| 归档时间: |
|
| 查看次数: |
3921 次 |
| 最近记录: |