首选Ruby-ist方式声明访问控制

时间:2010-09-20 11:32:52

标签: ruby access-specifier

这是一个简单的风格问题。在Ruby代码中声明访问控制的首选方法是什么?

示例A:


#!/usr/bin/env ruby

class MyClass
    def method1    # this is public by default
        #...
    end
    protected      # subsequent methods will be protected
        def method2
            #...
        end
    private        # subsequent methods will be private
        def method3
            #...
        end
    public         # subsequent methods will be public
        def method4
            #...
        end
end

或示例B:


#!/usr/bin/env ruby

class MyClass
    def method1
        #...
    end
    def method2
        #...
    end
    def method3
        #...
    end
    def method4
        #...
    end
    public :method1, :method4
    protected :method2
    private :method3
end

从语法上讲,我喜欢示例B.A引入了public / protected方法之后声明的private方法之间的歧义,尽管我没有理由不应该只调用{{1将其指定为method1之后。

然而,这不是我喜欢的。行业定义的标准是什么?

2 个答案:

答案 0 :(得分:2)

我见过第二种方法的唯一地方是Ruby书籍,只是作为“你也可以这样做”的例子。

你很少看到在第一种方法中使用“公共”,因为它是默认的,人们只是在任何受保护/私有声明之前定义所有公共方法。

答案 1 :(得分:1)

我认为这取决于你的编码风格。如果你读过Bob叔叔的“Clean Code”(我个人喜欢),我们鼓励你们将彼此紧密联系的方法或函数编写在一起。在这种情况下,使用示例B中的方法的可见性是有意义的:

class Foo
  def method1
    method2
  end

  def method2
    ..
  end
  private :method2
end

鲍勃叔叔实际上是将方法放在一起的好例子,因为这样可以防止在代码中滚动。