Re: [問題] 請問 Ruby 有類似 Java 的 final 嗎?
※ 引述《mokuku (mokuku)》之銘言:
: Java 語法裡面, 可以用
: class Test
: {
: public final void test_function() {}
: }
: 這樣的定義,
: 讓 Test 的子類別無法重新定義 test_function() 這個 method,
: 即 如果 Test 子類別嘗試
: class SubTest extends Test
: {
: public final void test_function() {}
: }
: 會發生
: test_function() in SubTest cannot override
: test_function() in Test; overridden method is final
: 這樣的錯誤!
: 請問 Ruby 裡有類似的語法嗎?
: 謝謝!
找到別人寫的解法
http://www.thesorensens.org
/2006/10/06/final-methods-in-ruby-prevent-method-override
文章中提供的 Code 如下:
class Object
@@final_methods = {}
class << self
def prevent_override?(method_name)
@@final_methods.each do |class_name, final_methods|
ancestors = self.ancestors
ancestors.shift # remove myself from the list
if ancestors.include?(class_name) and
final_methods.include?(method_name)
raise "Child class '#{self}' should not override parent class method '#{class_name}.#{method_name}'."
end
end
end
def method_added(method_name)
prevent_override?(method_name)
end
def final(*names)
@@final_methods[self] = names
end
end
end
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.169.208.119
推
07/29 23:11, , 1F
07/29 23:11, 1F
→
08/20 02:11, , 2F
08/20 02:11, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):