在Ruby中,使用本地范围中的变量,在Ruby中是否可以将单例方法添加到现有对象中



我想在字符串对象b = 'text'中添加一个单元顿方法code。它应该能够参考本地范围中定义的哈希a。但是我的尝试导致错误:

a = {'code'=>200, 'body'=>'text'}
b = a['body']
def b.code
  return a['code']
end
p b.code 
# => 'code': undefined local variable or method `a' for "text":String (NameError)

我该如何完成此工作?

添加一个单身方法,该方法具有对本地变量的引用不是惯用的ruby,但是您可以做到。您只需要使用块来定义方法,闭合就会记住a的值。

a = { 'code' => 200, 'body' => 'text' }
b = a['body']
b.send(:define_singleton_method, :code) { a['code'] }
b.code # => 200

a应作为参数传递给方法范围或在方法中声明以从一开始就具有本地方法范围(现在它不超出范围,因此在方法)。另一个选项是用$在全球范围内声明a,它应该抑制增加的错误(,但使用 )。

相关内容

  • 没有找到相关文章

最新更新