【问题标题】:What is the best way to hide module method in ruby?在 ruby​​ 中隐藏模块方法的最佳方法是什么?
【发布时间】:2015-05-10 22:38:45
【问题描述】:

在 JavaScript 中,很容易在闭包中隐藏函数或变量。
在 ruby​​ 中,私有不适用于 Module 方法。
有最佳做法吗?

module Lib

  def self.public_function
    private_function
  end

  private # Does not work
  def self.private_function

  end

end

Lib.public_function

我读过这篇文章:Private module methods in Ruby
但最佳答案对我来说还不够简单。

【问题讨论】:

标签: ruby


【解决方案1】:
module Lib

  def self.private_function
   puts "k"
  end

  private_class_method(:private_function)

end

Lib.private_function #=> NoMethodError

【讨论】:

    【解决方案2】:

    您可以使用宏private_class_method 在模块中实现私有方法,如下所示:

    def self.private_function
    end
    private_class_method :private_function
    

    【讨论】:

    • Ruby 没有宏。您的意思是“方法”(或者更好的是“方法Module#private_class_method”)。
    • 是的,对不起我的语言。不过,它的行为确实像一个经典宏
    【解决方案3】:

    private 仅使接收者强制隐含,不适合隐藏方法的目的。 protected 使该方法只能在接收器类的上下文中访问,并且更好地用于隐藏该方法。

    【讨论】:

    • 好点,已实现:Lib.singleton_class.send(:protected, :protected_class_method).
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2012-01-09
    • 2015-08-05
    • 2010-12-24
    • 1970-01-01
    相关资源
    最近更新 更多