是否可以使用新的 ruby 2.0 语法访问包含关键字参数的哈希?
class List::Node
attr_accessor :data, :next
def initialize data: nil, next: nil
self.data = data
self.next = next # ERROR!
end
end
Run Code Online (Sandbox Code Playgroud)
旧语法工作正常:
class List::Node
attr_accessor :data, :next
def initialize options = { data: nil, next: nil }
self.data = options[:data]
self.next = options[:next]
end
end
Run Code Online (Sandbox Code Playgroud)
- - - 编辑 - - -
我意识到next这是一个保留字,但我猜测关键字属性存储在哈希内部,我想知道是否可以访问它,例如通过self.args、self.parameters、self.options等。
这将起作用:
class List::Node
attr_accessor :data, :next
def initialize data: nil, _next: nil
self.data = data
self.next = _next
end
end
Run Code Online (Sandbox Code Playgroud)
next是 Ruby 保留字。使用不是 Ruby 保留关键字的名称。
编辑:是的,可能,但不是一个好主意。
class List::Node
attr_accessor :data, :next
def initialize data: nil, next: nil
self.data = data
self.next = binding.local_variable_get(:next)
end
end
p List::Node.new.next # nil
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |