我正在進行RoR項目,我想知道是否可以使用end
作爲方法名稱。它似乎工作正常,但我想知道這種方法是否會在將來帶來任何問題。我試着和它的作品:是否有任何問題將`end`作爲方法名稱?
class Dany
def end
puts 'Hola'
end
end
,這是輸出:
Dany.new.end # => Hola
我正在進行RoR項目,我想知道是否可以使用end
作爲方法名稱。它似乎工作正常,但我想知道這種方法是否會在將來帶來任何問題。我試着和它的作品:是否有任何問題將`end`作爲方法名稱?
class Dany
def end
puts 'Hola'
end
end
,這是輸出:
Dany.new.end # => Hola
將關鍵字用作方法名稱不是一個好主意,但只要您將該標記消除爲方法調用,就可以使用它。但這並不實際。
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
紅寶石讓你這樣做的,但你會碰到各種各樣的問題。
# end.rb
class Dany
def end
puts "Hola"
end
def other
end # should puts Hola
end
end
相反,你會得到
end.rb:10:語法錯誤,意想不到的keyword_end,預計輸入結束
底線:不要這樣做。不要使用任何keywords作爲方法名稱。
'loop'不是關鍵字,它是'Kernel'的私有實例方法。如果它*是關鍵字,則無法覆蓋它,因爲您只能在Ruby中覆蓋方法。 –
謝謝@JörgWMittag;我刪除了循環的例子。 – naomik