我可以为现有的Ruby类添加自定义方法吗?

问题描述 投票:1回答:3

我接受了一次练习,我应该像这样练习:

[1,2,3,4].custom_method(arg) 

我不知道如何做到这一点或是否可以做到。

ruby methods
3个回答
2
投票

要向所有数组对象添加方法,您需要覆盖它们,如下所示:

class Array
  def custom_method(multiplier)
    self.map{ |e| e*args }
  end
end

[1,2,3,4].custom_method(2)

现在,我们需要有关您想要做什么的更多信息。


0
投票

您还可以使用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

Source


-1
投票

看起来你想在一个对象上使用单例方法。但我认为这样做没有任何意义,除非在至少两个不同的场合可以引用该对象:定义方法时,以及调用方法时。所以,为了让它有意义,你至少必须将该对象分配给变量或其他东西。然后,有一些方法可以在其上定义单例方法。

一种方法是直接定义它:

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
© www.soinside.com 2019 - 2024. All rights reserved.