2013-08-24 47 views
0

我正在進行RoR項目,我想知道是否可以使用end作爲方法名稱。它似乎工作正常,但我想知道這種方法是否會在將來帶來任何問題。我試着和它的作品:是否有任何問題將`end`作爲方法名稱?

class Dany 
    def end 
    puts 'Hola' 
    end 
end 

,這是輸出:

Dany.new.end # => Hola 

回答

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 
8

紅寶石讓你這樣做的,但你會碰到各種各樣的問題。

# end.rb 
class Dany 

    def end 
    puts "Hola" 
    end 

    def other 
    end # should puts Hola 
    end 
end 

相反,你會得到

end.rb:10:語法錯誤,意想不到的keyword_end,預計輸入結束


底線:不要這樣做。不要使用任何keywords作爲方法名稱。

+0

'loop'不是關鍵字,它是'Kernel'的私有實例方法。如果它*是關鍵字,則無法覆蓋它,因爲您只能在Ruby中覆蓋方法。 –

+0

謝謝@JörgWMittag;我刪除了循環的例子。 – naomik

相關問題