Tag: 访问说明符

如何设置方法testing中使用的私有实例variables?

给定一个具有几个实例variables和一些方法的类。 一些实例variables可以通过attr_reader和attr_accessor访问。 因此,其他人是私人的。 一些私有实例variables在一个实例方法中被设置,并在另一个方法中被读取/使用。 为了testing我正在使用RSpec。 由于我对Ruby还是个新手,想要把所有的东西都弄清楚,所以我把testing定义得相当细致。 因此,每个实例方法都有一个describe块,它们本身被分割成context的一个子集。 一般的环境先决条件与before定义。 但是,当testing其中一个方法,即利用而不是设置一个私有variables时,我需要调用另一个方法,即设置这个variables。 这似乎相当超重,而不是模块化的。 有没有办法强制一个私人实例variables的特定值。 类似于用Object::instance_eval(:var) “ 取出 ”私有实例variables的值。

如何在Ruby中使类的构造函数是私有的?

class A private def initialize puts "wtf?" end end A.new #still works and calls initialize 和 class A private def self.new super.new end end 完全不工作 那么正确的方法是什么? 我想通过工厂方法来创buildnew私有方法。

Ruby中的私有模块方法

我有两个部分的问题 最佳实践 我有一个algorithm,使用公共接口对数据结构执行一些操作 它目前是一个拥有众多静态方法的模块,除了一个公共接口方法外,都是私有的。 有一个实例variables需要在所有方法之间共享。 这些是我可以看到的选项,哪个最好? 模块与静态(ruby模块)的方法 类与静态方法 Mixin模块包含在数据结构中 重构出修改该数据结构的algorithm部分(非常小),并调用一个调用algorithm模块静态方法的mixin 技术部分 有没有办法做一个私人的模块方法 ? module Thing def self.pub; puts "Public method"; end private def self.priv; puts "Private method"; end end 那里的private似乎没有任何影响 ,我仍然可以叫Thing.priv没有问题。

C ++中的私有虚拟方法

在C ++中创build一个私有方法的好处是什么? 我在一个开源的C ++项目中注意到了这一点: class HTMLDocument : public Document, public CachedResourceClient { private: virtual bool childAllowed(Node*); virtual PassRefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&); };

如何创build一个私人类的方法?

这种创build私有类方法的方法是如何工作的: class Person def self.get_name persons_name end class << self private def persons_name "Sam" end end end puts "Hey, " + Person.get_name puts "Hey, " + Person.persons_name #=> raises "private method `persons_name' called for Person:Class (NoMethodError)" 但是这不是: class Person def self.get_name persons_name end private def self.persons_name "Sam" end end puts "Hey, " + Person.get_name puts […]

了解Ruby中的私有方法

class Example private def example_test puts 'Hello' end end e = Example.new e.example_test 这当然是行不通的,因为我们指定了示例( e )的显式接收者实例,而这是针对“私有规则”的。 但是我不明白,为什么在Ruby中不能这样做: class Foo def public_m self.private_m # <= end private def private_m puts 'Hello' end end Foo.new.public_m public_m方法定义中的当前对象(即self )是Foo的实例。 那么为什么不允许? 要解决这个问题,我必须将self.private_m更改为private_m 。 但是为什么这个不一样,是不是self是public_m里的Foo的一个实例呢? 谁是裸字private_m电话的接收者? 不是那个self – 你实际上忽略了什么,因为Ruby会为你做(将自己调用private_m)? 我希望我没有太多混淆,对于Ruby我还是很新鲜的。 编辑:谢谢你的所有答案。 把它们放在一起,我终于能够明白(对于从未见过像Ruby这样的人的人来说并不那么明显): self本身可以是明确的和隐含的接受者,并且能够产生变化。 所以有两个规则,如果你想调用一个私有方法: self必须是隐式的接收方,而且这个self必须是当前类的一个实例(在这种情况下是例子 – 而且只有在内部实例方法定义的时候才发生,在这个方法执行期间)。 如果我错了,请纠正我。 class Example # […]

在Swift3中区分fileprivate和private是一个很好的例子

本文有助于理解Swift 3的新访问说明符。 它也给出了一些不同用法的fileprivate和private例子。 我的问题是 – 是不是使用fileprivate函数将被使用只在这个文件中使用相同的private ?

为什么Ruby有私有和受保护的方法?

在阅读本文之前,我认为Ruby中的访问控制是这样工作的: public – 可以被任何对象访问(例如Obj.new.public_method ) protected – 只能从对象本身以及任何子类访问 private – 与保护一样,但该方法不存在于子类中 然而,看起来, protected和private行为是相同的,除了你不能用一个明确的接收者调用private方法(即self.protected_method工作,但self.private_method不)。 这是什么意思? 什么时候有一种情况,当你不希望你的方法调用一个明确的接收器?

哪一个是Java中的默认访问说明符?

所以我刚开始阅读一本Java书,想知道; 哪个访问说明符是默认的,如果没有指定?

私人,公共和受保护的inheritance之间的区别

C ++中public , private和protectedinheritance之间的区别是什么? 我在SO上发现的所有问题都是针对具体案例的。