使用静态方法调用私有方法的Ruby类?
我有一个包含许多静态方法的类。每个方法都必须调用一个公共方法,但我尽量不公开后一种方法。将其设置为私有将只允许从类的自身实例进行访问?保护似乎也不能解决这里的问题 如何隐藏do_calc,以免在静态上下文中被外部调用?(让它可以从前两个静态方法调用。)使用静态方法调用私有方法的Ruby类?,ruby,static,encapsulation,Ruby,Static,Encapsulation,我有一个包含许多静态方法的类。每个方法都必须调用一个公共方法,但我尽量不公开后一种方法。将其设置为私有将只允许从类的自身实例进行访问?保护似乎也不能解决这里的问题 如何隐藏do_calc,以免在静态上下文中被外部调用?(让它可以从前两个静态方法调用。) 首先,static并不是Ruby术语的一部分 让我们举一个简单的例子: class Bar def self.foo end end 它在显式对象self上定义方法foo,该对象在该范围内返回包含的类Bar。 是的,它可以定义为一个类方
首先,
static
并不是Ruby术语的一部分
让我们举一个简单的例子:
class Bar
def self.foo
end
end
它在显式对象self
上定义方法foo
,该对象在该范围内返回包含的类Bar
。
是的,它可以定义为一个类方法,但静态在Ruby中并没有真正的意义
然后,private
将不起作用,因为在显式对象上定义方法(例如,def self.foo
)会绕过访问限定符并使该方法公开
您可以使用
类定义私有类方法,如下所示:
class Foo
def self.bar
do_calc
end
def self.baz
do_calc
end
def self.do_calc
#...
end
private_class_method :do_calc
end
或者从Ruby 2.1开始:
class Foo
def self.bar
do_calc
end
private_class_method def self.do_calc
#...
end
end
你的问题是什么?为什么self.bar
调用带括号的方法而self.baz
不调用?我想这会满足你的要求。而且行话也不是每个人词汇表中的一部分;)
Foo.bar
calculating...
Foo.baz
calculating...
Foo.do_calc
NoMethodError: private method `do_calc' called for Foo:Class
class Foo
def self.bar
do_calc
end
def self.baz
do_calc
end
def self.do_calc
#...
end
private_class_method :do_calc
end
class Foo
def self.bar
do_calc
end
private_class_method def self.do_calc
#...
end
end