-2

我想向codeString 对象添加一个单例方法b = 'text'。它应该能够引用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)

我怎样才能使这项工作?

4

2 回答 2

2

添加一个包含对局部变量的引用的单例方法不是 Ruby 的惯用方法,但您可以做到。您只需使用块定义方法,闭包就会记住a.

a = { 'code' => 200, 'body' => 'text' }
b = a['body']

b.send(:define_singleton_method, :code) { a['code'] }

b.code # => 200
于 2015-04-30T23:14:00.897 回答
1

a应该作为参数传递给方法范围或在方法中声明为从一开始就具有本地方法范围(现在它超出范围,因此在方法中无法识别)。另一种选择是使用a全局声明$,它应该禁止引发错误(但会导致使用全局变量的不良示例)。

于 2015-04-30T23:12:02.663 回答