obj = SomeObject.new

def obj.new_method
  "do some things"
end

puts obj.new_method
> "do some things"

这很好用.然而,我需要在现有方法中做同样的事情:

def some_random_method
  def obj.new_method
    "do some things"
  end
end

也可以,但是在一个方法中包含一个方法看起来非常可怕.问题是,有没有其他方法可以添加这种方法?

推荐答案

在ruby 1.9+中,使用define_singleton_method有一种更好的方法,如下所示:

obj = SomeObject.new

obj.define_singleton_method(:new_method) do
  "do some things"
end

Ruby相关问答推荐

使用 RSpec 测试嵌套哈希时随机排序数组的匹配

PDFNet:Ubuntu 16.04 和 Ubuntu 20.04 上 PDF 输出文本的词序不同

如何在 rspec 中使用 `eq` 匹配器和 `hash_include` 匹配器来获取哈希数组

整数除以负数

为什么 Rake 不能连续调用多个任务?

Windows 上的 Jekyll:Pygments 不工作

Ruby 哈希文字的顺序是否得到保证?

Ruby语法

Scala 的扩展性是否优于其他 JVM 语言?

如何判断 Capistrano 中是否存在文件(在远程服务器上)?

判断 Ruby HTTP 响应是否成功

Sinatra 登录?

如何将哈希键转换为方法名称?

纯 Ruby 并发哈希

如何在 Ruby 中将类构造函数设为私有?

Python 中的一切都像 Ruby 一样是对象吗?

常见的 Ruby 习语

class << self vs self.method with Ruby:什么更好?

obj.nil?与 obj == nil

Ruby:捕获异常后继续循环