一个小测试用例:
class A
def self.print
puts "Hello A"
end
end
class B < A
end
A.print
B.print
输出:
Hello A
Hello A
我想阻止print
中定义的class A
函数的继承。有可能吗?
想要输出:
Hello A
`<main>': undefined method `print' for B:Class (NoMethodError)
我找到了private_class_method
,但由于A.print
来电失败,我所寻找的并不是特别的。
答案 0 :(得分:5)
class A
def self.print
puts "Hello A"
end
def self.inherited(klass)
class << klass
undef :print
end
end
end
class B < A
end
A.print
# Hello A
B.print
# private method `print' called for B:Class (NoMethodError)
答案 1 :(得分:3)
class B < A
class << self
undef print
end
end
在class << self
块中声明方法与声明前缀为self.
的方法相同。
它还允许您想要的行为。