【问题标题】:Preferred Ruby-ist way of declaring access controls声明访问控制的首选 Ruby-ist 方式
【发布时间】:2010-09-20 11:32:52
【问题描述】:

这是一个简单的风格问题。在 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 在 protected/private 方法之后声明的 public 方法之间引入了歧义,尽管我看不出为什么你不应该在将 method1 指定为 @ 之后直接调用它987654327@.

然而,这不是我喜欢的。对此行业定义的规范是什么?

【问题讨论】:

    标签: ruby access-specifier


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。这个例子确实来自 Programming Ruby 2nd Edition 书。
    【解决方案2】:

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

    class Foo
      def method1
        method2
      end
    
      def method2
        ..
      end
      private :method2
    end
    

    Bob 叔叔实际上为将方法放在一起提供了一个很好的例子,因为这可以防止滚动代码。

    【讨论】:

    • 感谢您的链接。我正在从我的服务器和 Nagios 和我自己的实用程序的编码自动化工具转向全职程序员,所以我目前正在填补我的知识空白。在当下,每个想法都很有价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 2011-12-30
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多