1

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

class Dany
  def end
    puts 'Hola'
  end
end

这是输出:

Dany.new.end # => Hola
4

2 回答 2

8

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

# end.rb
class Dany

  def end
    puts "Hola"
  end

  def other
    end  # should puts Hola
  end
end

相反,你会得到

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


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

于 2013-08-24T21:53:13.843 回答
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
于 2013-08-24T21:59:06.067 回答