将`end`作为方法名称有什么问题吗?

时间:2013-08-24 21:48:53

标签: ruby

我正在开发一个RoR项目,我想知道是否可以使用end作为方法名称。它似乎工作正常,但我想知道这种方法将来是否会带来任何问题。我试过了它的确有效:

class Dany
  def end
    puts 'Hola'
  end
end

这是输出:

Dany.new.end # => Hola

2 个答案:

答案 0 :(得分:8)

Ruby让你这样做,但你会遇到各种各样的问题。

# end.rb
class Dany

  def end
    puts "Hola"
  end

  def other
    end  # should puts Hola
  end
end

相反,你会得到

  

end.rb:10:语法错误,意外的keyword_end,期待输入结束


底线:不要这样做。不要使用任何keywords作为方法名称。

答案 1 :(得分:3)

使用关键字作为方法名称并不是一个好主意,但只要您将令牌消歧作为方法调用,就可以使用它。但这不实用。

Dany.new.instance_eval{self.end} # => Hola
Dany.new.send(:end)              # => Hola
Dany.new.method(:end).call       # => Hola
Dany.new.instance_eval{end}      # => syntax error, unexpected keyword_end

使用()的通常消歧似乎不适合这种情况,使其变得复杂。

Dany.new.instance_eval{end()}    # => syntax error, unexpected keyword_end