Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 作为方法集合的ruby模块_Ruby On Rails_Ruby_Module - Fatal编程技术网

Ruby on rails 作为方法集合的ruby模块

Ruby on rails 作为方法集合的ruby模块,ruby-on-rails,ruby,module,Ruby On Rails,Ruby,Module,我有一个rails应用程序,可以从一些java服务加载大量数据。我正在编写一个模块,它将允许我用这些数据填充一些选择框,我正在尝试正确地包含这些数据,以便在视图中引用它们。这是我的模块 module FilterOptions module Select def some_select return "some information" end end end 我的想法是在我的应用程序助手中包含FilterOption,我想我可以使用Select::some

我有一个rails应用程序,可以从一些java服务加载大量数据。我正在编写一个模块,它将允许我用这些数据填充一些选择框,我正在尝试正确地包含这些数据,以便在视图中引用它们。这是我的模块

module FilterOptions
  module Select

    def some_select
     return "some information"
    end
  end
end
我的想法是在我的应用程序助手中包含FilterOption,我想我可以使用
Select::some\u Select
引用我的方法,但事实并非如此。我必须
包括FilterOptions::Select
,然后我可以自己引用方法
some\u Select
。不过我不想这样,因为我觉得有些人可能不知道
some\u select
来自我自己的模块,这让人有点困惑


那么,我如何编写类似于公共静态方法的模块方法,以便包括我的主模块,并使用子模块名称空间引用我的方法,如
Select::some_Select

如果在模块本身的上下文中定义模块方法,则无需导入即可调用它们:

module FilterOptions
  module Select
    def self.some_select
     return "some information"
    end
  end
end

puts FilterOptions::Select.some_select
# => "some information"
也可以导入一个模块,而不导入下一个模块,而是按名称引用该模块:

include FilterOptions
puts Select.some_select
# => "some information"

module_函数使模块函数可以作为实例方法或模块函数调用:

#!/usr/bin/ruby1.8

module Foo

  def foo
    puts "foo"
  end
  module_function :foo

end

Foo.foo        # => foo
Foo::foo       # => foo

include Foo
foo            # => foo
有时,您希望模块中的每个方法都是“模块函数”,但反复说“模块函数”可能会变得单调和重复。在这种情况下,只需扩展模块本身:

!/usr/bin/ruby1.8

module Foo

  extend self

  def foo
    puts "foo"
  end

end

Foo.foo        # => foo
Foo::foo       # => foo

include Foo
foo            # => foo

好吧,我觉得有点傻,我总是在课堂上和self一起做这个,我不知道为什么我认为一个模块会有所不同。顺便说一句,使用Select::some_Select和Select.some_Select有什么区别?这是个好问题。对于常量,您需要使用::符号,因为它不是方法调用,但我认为您可以对方法使用其中任何一种。嘿,很抱歉响应太晚,感谢您提供的详细信息,我现在正在学习元编程,所以我将把它添加到我的工具箱中!您可以使用
module_方法
extend self
,因为如果将其放在一行,下面的所有内容都将受到影响。但请注意,它们并不完全相同