我可以为现有的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

Source

另一答案

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

一种方法是直接定义它:

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类添加自定义方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 类别小结

JAVA并发-为现有的线程安全类添加原子方法

iOS类别(category)不能添加成员变量但是可以添加属性的问题

iOS学习笔记06—Category和Extension

为现有的 NodeJS 服务器生成 Swagger 文档

找到我的自定义代码片段 Xcode 6?