1
我想通过模块给一个类提供一个受保护的方法,只能由它自己和其他继承它们的类来调用。我想隐藏该方法被Class.method使用,并且只能由Class类内部或继承Class的子类访问。我会如何去做这件事?这是我迄今为止所拥有的。从模块定义受保护的类方法 - ruby
#! /usr/bin/env ruby
module ProtectedClassMethods
@class_instance_var = 1234567
def included(base); base.extend(ProtectedClassMethods); end
protected
def protected_class_method; puts "A PROTECTED CLASS METHOD => #{@class_instance_var}"; end
end
class Class1
def value; "Class1"; end
end
class Class2 < Class1
extend ProtectedClassMethods
class << self
protected_class_method #crashes here
end
def value; "Class2"; end
end
class Class3 < Class2
class << self
@class_instance_var = 24681012
protected_class_method
end
def value; "Class3"; end
end
puts "Initializing Class1"
class1 = Class1.new
puts "Done (Class1)"
puts "Initializing Class2"
class2 = Class2.new
puts "Done (Class2)"
puts "Initializing Class3"
class3 = Class3.new
puts "Done (Class3)"
puts class1.value
puts class2.value
puts class3.value
给出了这样的错误
./protected_class_test.rb:20:in `singletonclass': undefined local variable or method `protected_class_method' for #<Class:Class2> (NameError)
from ./protected_class_test.rb:18:in `<class:Class2>'
from ./protected_class_test.rb:16:in `<main>'
你的问题是什么? – sawa 2015-02-12 05:22:16