【问题标题】:Best practice for namespacing functions in Ruby? (novice question)Ruby 中命名空间函数的最佳实践? (新手问题)
【发布时间】:2011-01-28 16:07:14
【问题描述】:

(StackOverflow 告诉我这个问题是“主观的,可能会被关闭”……好吧,无论如何我都会试一试)

我正在编写一堆辅助方法(用于 TextMate 包),并且我希望(并且我需要)将它们整齐地命名。

这些方法实际上只是函数,即它们不会在其自身范围之外的任何东西上操作,因此并不真正属于一个类。没有什么需要实例化的。

到目前为止,我一直在这样做并且效果很好

module Helpers::Foo
    module_function
    def bar
        # ...
    end
end
Helpers::Foo.bar # this is how I'd like to call the method/function

但最好是:
1. 跳过module_function,将方法/函数声明为self.*?
2. 还是声明一个类而不是一个模块会更好?
3. 还是使用class << self(在模块或类中)?
4. 或者完全是别的什么?

我意识到这是一个非常开放的问题,但我真的只是想听听人们在做什么。

【问题讨论】:

    标签: ruby namespaces


    【解决方案1】:

    两个都喜欢

    module Foo
      def self.bar
        "bar"
      end
    end
    
    Foo.bar #=> "bar"
    

    module Foo
      def Foo.bar
        "bar"
      end
    end
    
    Foo.bar #=> "bar"
    

    但可能倾向于前者,我认为self. 确实具有描述性。

    编辑:阅读 cmets 后,我提出了第三个选项,我更喜欢可读性。从技术上讲,我认为这将被定义为扩展 Eigen 类中包含的方法。

    module Foo
      module ClassMethods
        def baz
          "baz"
        end
      end
      extend ClassMethods
    end
    
    Foo.baz #=> "baz"
    

    【讨论】:

    • 好点。但我担心self. 在我的代码中将失去其意义,因为实际上所有东西都是一个只包含辅助函数的模块。所以 everything 将被定义为self.——在这种情况下,我不妨不将任何东西定义为self.,而是使用module_function
    • 我明白了,我将更新答案以包括我更喜欢这种情况的第三个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2011-05-31
    • 2014-07-21
    • 1970-01-01
    • 2010-10-03
    • 2016-04-25
    • 2013-05-18
    相关资源
    最近更新 更多