我可以为现有的Ruby类添加自定义方法吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以为现有的Ruby类添加自定义方法吗?相关的知识,希望对你有一定的参考价值。
我接受了一次练习,我应该像这样练习:
[1,2,3,4].custom_method(arg)
我不知道如何做到这一点或是否可以做到。
答案
要向所有数组对象添加方法,您需要覆盖它们,如下所示:
class Array
def custom_method(multiplier)
self.map{ |e| e*args }
end
end
[1,2,3,4].custom_method(2)
现在,我们需要有关您想要做什么的更多信息。
另一答案
您还可以使用instance_eval
将新方法仅分配给实例本身。你可以尝试做这样的事情:
my_array = [1,2,3,4]
my_array.instance_eval do
def custom_method(args) do
# do whatever you need to here
end
end
my_array.custom_method(args) # you would invoke this with your arguments
# whatever they may be
另一答案
看起来你想在一个对象上使用单例方法。但我认为这样做没有任何意义,除非在至少两个不同的场合可以引用该对象:定义方法时,以及调用方法时。所以,为了让它有意义,你至少必须将该对象分配给变量或其他东西。然后,有一些方法可以在其上定义单例方法。
一种方法是直接定义它:
a = [1,2,3,4]
def a.foo
"foo"
end
a.foo # => "foo"
[1, 2, 3].foo # >> NoMethodError: undefined method `foo' for [1, 2, 3]:Array
另一种方法是将其定义为其singleton类的实例方法。
b = [1,2,3,4]
class << b
def foo
"foo"
end
end
b.foo #=> "foo"
[1, 2, 3].foo # >> NoMethodError: undefined method `foo' for [1, 2, 3]:Array
以上是关于我可以为现有的Ruby类添加自定义方法吗?的主要内容,如果未能解决你的问题,请参考以下文章