首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby中的私有模块方法

Ruby中的私有模块方法
EN

Stack Overflow用户
提问于 2008-11-25 21:01:49
回答 10查看 91.4K关注 0票数 119

我有一个两部分的问题

最佳实践

  • 我有一个使用公共接口对数据结构执行某些操作的算法
  • 它当前是一个包含许多静态方法的模块,除了一个公共接口方法之外,所有方法都是私有的。
  • 需要在所有方法之间共享一个实例变量。

这些是我能看到的选项,哪一个是最好的?:

带有静态(ruby中的‘

  • Module’)方法的模块带有静态模块模块,用于将修改该数据结构的算法部分(非常小)包含到数据模块中,并使其成为调用算法模块

的静态方法的混合

技术部分

有没有办法让私有模块方法成为

代码语言:javascript
复制
module Thing
  def self.pub; puts "Public method"; end
  private
  def self.priv; puts "Private method"; end
end

private in 似乎没有任何效果,我仍然可以毫无问题地调用Thing.priv

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-01-08 15:11:19

我认为最好的方法(主要是如何编写现有的库)是通过在模块中创建一个处理所有逻辑的类,该模块只提供了一个方便的方法,例如

代码语言:javascript
复制
module GTranslate
  class Translator
    def perform(text)
      translate(text)
    end

    private

    def translate(text)
      # do some private stuff here
    end
  end

  def self.translate(text)
    t = Translator.new
    t.perform(text)
  end
end
票数 94
EN

Stack Overflow用户

发布于 2009-01-06 21:48:52

还有Module.private_class_method,可以说它表达了更多的意图。

代码语言:javascript
复制
module Foo
  def self.included(base)
    base.instance_eval do
      def method_name
        # ...
      end
      private_class_method :method_name
    end
  end
end

对于问题中的代码:

代码语言:javascript
复制
module Thing
  def self.pub; puts "Public method"; end
  def self.priv; puts "Private method"; end
  private_class_method :priv
end

Ruby 2.1或更高版本:

代码语言:javascript
复制
module Thing
  def self.pub; puts "Public method"; end
  private_class_method def self.priv; puts "Private method"; end
end
票数 83
EN

Stack Overflow用户

发布于 2016-01-26 19:15:33

代码语言:javascript
复制
module Writer
  class << self
    def output(s)
      puts upcase(s)
    end

    private

    def upcase(s)
      s.upcase
    end
  end
end

Writer.output "Hello World"
# -> HELLO WORLD

Writer.upcase "Hello World"
# -> so.rb:16:in `<main>': private method `upcase' called for Writer:Module (NoMethodError)
票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/318850

复制
相关文章

相似问题

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