首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用方法指定还是在ACL函数中列出?

使用方法指定还是在ACL函数中列出?
EN

Stack Overflow用户
提问于 2013-08-21 13:13:36
回答 2查看 65关注 0票数 1

我看到了在Ruby中指定访问控制的两种方法。一个带有方法指定的访问修饰符,另一个作为ACL函数的列表。

例如,使用方法指定的访问修饰符

代码语言:javascript
复制
class MyClass
    public
        def method1
            #...
        end
    private
        def method2
            #...
        end

end

另一种方法是将访问指定为对ACL函数的列表。

代码语言:javascript
复制
class MyClass
        def method1
            #...
        end
        def method2
            #...
        end
        public :method1
        private :method2
end

有什么理由用一种而另一种?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-21 14:36:58

通常,您使用您描述的第一种方法。首先将所有公共方法分组在一起(没有指定public,因为它在开始时是默认的),然后是分组在一起的所有受保护的方法,最后是分组在一起的所有私有方法。举个例子:

代码语言:javascript
复制
class C

  def first_public_method
    #...
  end

  def second_public_method
    #...
  end

  protected

    def protected_method_1
      #...
    end

    def protected_method_2
      #...
    end

  private

    def one_private_method
      #...
    end

    def another_private_method
      #...
    end

end

您在问题中描述的第二种方法很少使用,主要用于做一些技巧。它允许您执行以下操作,例如,使用第一种方法是不可能的:

  • 动态地构建应该具有特定可见性的方法列表,然后通过使用动态列表调用适当的方法来设置该可见性,例如public(*an_array_containing_names_of_all_methods_that_should_be_public)
  • 定义类后更改方法的可见性

以上第二点的例子如下:

代码语言:javascript
复制
class C

  #...

  private

    def a_private_method
      #...
    end

end

instance = C.new
instance.a_private_method # raises NoMethodError

C.send(:public, :a_private_method) # changes the visibility of the method dynamically to public
instance.a_private_method # executes the formerly private method without error
票数 1
EN

Stack Overflow用户

发布于 2013-08-21 14:15:15

如果用方法指定修饰符,那么它就在那里,有方法定义,而不是隐藏在某个地方。通常,您可以将文件底部的所有私有方法分组为一个private修饰符,如privatepublicmodule_function (其他?)做“这条线下的每一件事,直到遇到矛盾的事情”。

或者,您可以使用方法表单,但是我会尽可能地将它们放置在顶部,这样就很明显了。等等,这会导致“这个方法没有定义,那么我到底是什么隐私?”例外?在这种情况下,我会把他们分组在底部。关键是不要把它们分散在中间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18358442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档