【发布时间】:2012-02-02 13:29:57
【问题描述】:
只是想知道,对于模型中的某些方法,我们什么时候必须真正使用private 或protected?
有时我会不厌其烦地将我的方法分组到private 或protected。我只是保持原样。但我知道这一定是一种不好的做法,否则这两个分组将不会在编程中创建。
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby access-specifier
只是想知道,对于模型中的某些方法,我们什么时候必须真正使用private 或protected?
有时我会不厌其烦地将我的方法分组到private 或protected。我只是保持原样。但我知道这一定是一种不好的做法,否则这两个分组将不会在编程中创建。
谢谢。
【问题讨论】:
标签: ruby-on-rails ruby access-specifier
record.method(),那么“public”self.method(),则为“私有”self.method() # in subclass,然后“受保护”【讨论】:
private 方法。 protected 方法使您能够传入同一类的对象并在该对象上执行受保护的方法。
我会发表我的意见,也许我会因此而受到鼓舞,但我不关心 Ruby 中的 protected 或 private。现实情况是,Ruby 把你当成人一样对待,如果你想从类外运行私有方法,你可以(那里有areways)。您可以在类外运行受保护的方法。你甚至可以重新分配常量……基本上你可以做任何你喜欢的事情。
这就是我喜欢它的原因,这是你的责任。我的感觉是,将某事标记为受保护或私有,您需要做两件事:
此外,您使测试变得更加困难,因为测试私有方法可能会非常痛苦(请参阅What's the best way to unit test protected & private methods in Ruby? 了解解决方法)
由于最后两个原因,我不理会它们。如果你真的想在你的类/方法和消费者(无论是代码还是开发人员)之间设置某种屏障,那么还有其他更有效的方法(代理、混淆、加密、密码保护方法等)。否则,为什么不让他们访问您使用的相同工具?
【讨论】:
--visibility 选项。通过 public、protected 和 private,我可以生成不同版本的文档,其中包含更多或更少的细节。
@private 标签,但我从未见过它有什么用处。谢谢。
我不知道 Ruby 是一个特例,但我认为答案也与其他语言相同,所以这里是:
私有方法只能由同一类的成员访问,而受保护的方法也可用于扩展声明该方法的基类的类的成员。
【讨论】:
private 和 protected 的作用,但我们什么时候不能忽略它?
private,除非有充分的理由让它们成为protected 或public
private 成员仅对该类可见,protected 成员对该类的子项可见,public 成员对该类可见。如果这些是实例成员,那么它们可能更贴切地封装在该类的实例中(即对象)
private 成员在 Ruby 中也可用于子类。