Ruby 关键字作为命名哈希参数

mak*_*han 5 ruby ruby-2.0

是否可以使用新的 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.argsself.parametersself.options等。

Aru*_*hit 6

这将起作用:

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)

local_variable_get