Tag: 模块

Ruby包含模块中模块的单一方法

我有一个以下模块 module SimpleTask def task1 end def task2 end def task3 end end 我有一个模型只需要模块SimpleTask task2方法。 我知道在我的模型中include SimpleTask可以完成这项工作。 但我想知道我是否只能在我的模型中包含特定的task2方法。

如何判断是否已在模块命名空间中定义了Constant,而不是全局命名空间?

我有两个同名的Const; 一个是全局const,另一个是在命名空间Admin下定义的。 但是我需要区分它们;全局的已经定义了,如果还没有定义,则需要自定义范围: A = ‘A Global Const’ module Admin A = ‘A Const within the Admin namespace’ if const_defined? ‘A’ # always true and the Admin::A can never be defined! end puts A # => ‘A Global Const’ puts Admin::A # => NameError: uninitialized constant Admin::A # the Admin::A will never be defined. 但是如果定义了全局A,那么“const_defind?” […]

模块中的实例方法

请考虑以下代码: module ModName def aux puts ‘aux’ end end 如果我们用class替换module ,我们可以执行以下操作: ModName.new.aux 但是,模块不能被实例化。 有没有办法在模块上调用aux方法?

是否可以在Ruby中为模块创建别名?

在Python中,您可以使用“as”为模块设置别名: import mymodule as mm 但我似乎无法找到ruby的等价物。 我知道你可以include而不是require一个模块,但这会冒命名空间冲突的风险。 有没有相当于Python模块别名?

在Ruby中,模块中定义的类如何知道模块的常量?

我试图理解模块中定义的类如何知道模块的常量。 这是我的意思的一个例子: module Car class Wheel end class Seat p Wheel # Car::Wheel end end 我知道这很明显,但由于Wheel在Seat的层次结构中无处可去,我不明白它是如何访问它的。

Ruby:C类包含模块M; 包括M中的模块N不影响C.什么给出?

更详细地说,我有一个模块Narf ,它为一系列类提供了基本function。 具体来说,我想影响inheritanceEnumerable所有类。 所以我把include Narf在Enumerable 。 Array是一个默认包含Enumerable的类。 然而,它并没有受到Narf在模块中的后期加入的影响。 有趣的是,在包含之后定义的类从Enumerable获得Narf 。 例: # This module provides essential features module Narf def narf? puts “(from #{self.class}) ZORT!” end end # I want all Enumerables to be able to Narf module Enumerable include Narf end # Fjord is an Enumerable defined *after* including Narf in Enumerable class Fjord […]

在Ruby中重新打开嵌套模块exception

为什么重新打开嵌套模块会根据使用的语法给出不同的结果? 例如,这很好用: module A module E end end module A module E def Ee end end end 但是这个: module A module E end end module A::E def Ee end end 给出错误: reopen.rb:6:in `’: uninitialized constant A::E::E (NameError) from reopen.rb:5:in `’ (在有人指出这一点之前,解决方法是在定义Ee时使用self而不是模块名称,但这不是这篇文章的重点。)

在使用Ruby on Rails ActiveSupport :: Concernfunction时如何“嵌​​套”模块的包含?

我正在使用Ruby 1.9.2和Ruby on Rails v3.2.2 gem。 我希望“嵌套”包含模块,因为我使用的是RoR ActiveSupport :: Concernfunction,但我怀疑应该在哪里说明include方法。 也就是说,我有以下几点: module MyModuleA extend ActiveSupport::Concern # include MyModuleB included do # include MyModuleB end end 我应该在include MyModuleB的“body”/“context”/“scope”中声明包含MyModuleA还是应该在included do … end块中声明? 有什么区别,我应该从中得到什么?

关于在Ruby on Rails中使用模块的建议

我正在使用Ruby on Rails 3,我知道在哪种情况下使用模块是好的。 我有一个控制器,包括我以这种方式使用的许多私有方法: class UsersController < ApplicationController def update params[:option1] = get_user_option1 params[:option2] = get_user_option2 if params[:option2] params[:saving_success] = update_user end … if params[:saving_success] flash[:notice] = another_method_1 else flash[:error] = another_method_2 end end private def update_user if params[:option1] == something @user.save end end def another_method_1 params[…] = … … end 正如您所看到的, 在私有方法中,我有ActiveRecords和params方法之类的东西 。 […]

在几个文件中打破ruby模块

我有一个ruby模块,应该包含很多类 module A class First #somemethods end class Second #somemethods end class Third #somemethods end end 我想在rails中做的是将这些类拆分成几个文件,将这个庞大的模块拆分成几个相关文件的最佳做法是什么?