草庐IT

ruby - 在 Ruby 中使用匿名模块

假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError)

我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类?

我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

ruby - 为什么人们使用 `Module.send(:prepend, …)` ?

我正在学习如何在我的Ruby代码中使用Module.prepend而不是alias_method_chain,我注意到有些人使用send调用它(example):ActionView::TemplateRenderer.send(:prepend,ActionViewTemplateRendererWithCurrentTemplate)而其他人直接调用它(example):ActionView::TemplateRenderer.prepend(ActionViewTemplateRendererWithCurrentTemplate)而且,虽然我还没有看到任何人使用这种风格,但我从

ruby - 模块嵌套代码风格偏好

我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

ruby-on-rails - 测试我的 Ruby gem:Shoulda::Matchers:Module (NoMethodError) 的未定义方法 `configure'

我正在开发我的第一个Rubygem,并捆绑了cucumber、rspec和shoulda-matches进行测试。当我运行rspec时,出现以下错误:/app/my_gem/spec/spec_helper.rb:6:in`':undefinedmethod`configure'forShoulda::Matchers:Module(NoMethodError)这是我的gem规范:#my_gem.gemspec...Gem::Specification.newdo|spec|......spec.add_development_dependency"activemodel"spec.a

ruby - 如何在 ruby​​ 模块中包含单元测试?

我正在尝试将模块的单元测试包含在与模块本身相同的源文件中,遵循Perlmodulino模型。#!/usr/bin/envrubyrequire'test/unit'moduleModulinodefmodulino_functionreturn0endendclassModulinoTest现在,我可以运行执行此源文件的单元测试。但是,当我从另一个脚本需要/加载它们时,它们也会运行。如何避免这种情况?是否有更惯用的方法来使用Ruby实现此目的,除非不鼓励这种做法? 最佳答案 就我个人而言,我从未听说有人试图在Ruby中这样做。这绝对

ruby - 执行包含多个模块的同名方法

我有两个具有相同方法名称的模块。当我在某个类中包含两个模块时,只执行最后一个模块的方法。我需要在初始化类时同时执行:classMyClassincludeFirstModuleincludeSecondModuledefinitializefoo#fooiscontainedinbothmodulesbutonlytheoneinSecondModulesisexecutedendend可行吗? 最佳答案 正如YusukeEndoh所说,在Ruby中一切皆有可能。在这种情况下,您必须忘记只说“foo”的便利性,并且必须非常明确地说明

ruby - 将现有类添加到模块中

我在app/classes文件夹中有一些现有的ruby​​类:classA...endclassB...end我想将这些类分组到一个模块MyModule中我知道我可以这样做:moduleMyModuleclassA...endclassB...endend但是是否有元编程快捷方式可以执行相同的操作以便我可以“导入”所有现有类?谢谢,吕克 最佳答案 moduleFooA=::AB=::BendFoo::A.new.bar请注意,常量上的::前缀首先开始搜索全局命名空间。就像路径名上的前导/一样。这使您可以将全局类A与模块化常量Foo:

ruby-on-rails - 类型错误 : wrong argument type String (expected Module)

我有以下代码:classProfileLookup基本上包含大量查找数据,按类别拆分。目的是为数据库中的每个类别创建一个方法。通过Rails控制台,此代码按预期工作:ruby-1.9.3@hub:002>ProfileLookup.available_gendersProfileLookupLoad(0.6ms)SELECT"profile_lookups".*FROM"profile_lookups"WHERE"profile_lookups"."category"='gender'ORDERBYvalue=>["Female","Male"]但是,我的规范不合格。以下规范:requ