草庐IT

内置模块

全部标签

ruby - 在扩展自身的模块中的实例方法中调用单例方法

我自己扩展了Kernel,在实例方法Kernel#abort的定义中,我调用了单例方法Kernel.abort:moduleKernelextendselfdefabortputs"PressENTERtoexit..."getsKernel.abortendendabort当我调用Kernel#abort时,方法定义中的Kernel.abort调用似乎是指原始的Kernel#abort(扩展为Kernel.abort)。Ruby如何知道当我写Kernel.abort时,我指的是原始的abort方法,而不是我刚刚创建的方法?我将如何递归调用我刚刚创建的新abort方法?

ruby-on-rails - Ruby 2.0 如何在包含模块后从模块中取消包含模块?

moduleXendmoduleYendmoduleZ#TODOincludeXreplacementofincludingY#TODOincludeYreplacementofincludingXend有没有办法解决ruby​​不包含uninclude关键字的问题?? 最佳答案 如果您真的需要这种功能,您可以使用refinements来实现.classFooendmoduleXdefxputs'x'endendmoduleYendmoduleRrefineFoodoincludeXincludeYendend#Inaseparat

ruby - 从另一个模块覆盖模块方法

我想从另一个模块B覆盖模块A的方法,该方法将对A进行猴子补丁。http://codepad.org/LPMCusztmoduleAdeffoo;puts'A'endendmoduleBdeffoo;puts'B';super;endendA.module_eval{includeB}#whynooverride???classCincludeAend#mustprint'AB',butonlyprints'A':(C.new.foo 最佳答案 moduleAdeffooputs'A'endendmoduleBdeffooputs'B

ruby - ruby 模块 self.included 和 self.extended 行为记录在哪里?

我正在查看rubymixin博客文章,它说当一个模块包含在一个类中时,它的self.included()方法被调用。我的问题是,这种行为的正式记录在哪里?我似乎无法在ruby​​-docs.org网站或镐上找到它。 最佳答案 虽然它不在RubyDoc上出于某种原因,included实际上已被记录。在终端中运行riModule.included提供以下内容:included(othermod)Callbackinvokedwheneverthereceiverisincludedinanothermoduleorclass.Thiss

ruby - 如何模拟 Ruby 模块函数?

如何在我的项目中模拟自写模块的模块功能?给定模块和功能moduleModuleA::ModuleBdefself.my_function(arg)endend这叫做像ModuleA::ModuleB::my_function(with_args)当它在我正在为其编写规范的函数中使用时,我应该如何模拟它?将它加倍(obj=double("ModuleA::ModuleB"))对我来说毫无意义,因为该函数是在模块上调用的,而不是在对象上调用的。我试过对它进行stub(ModuleA::ModuleB.stub(:my_function).with(arg).and_return(somet

ruby - 如何将模块混合到 rspec 上下文中

如何将模块混合到rspec上下文(也称为describe),以便模块的常量可用于规范?moduleFooFOO=1enddescribe'constantsinrspec'doincludeFoopconst_get(:FOO)#=>1pFOO#uninitializedconstantFOO(NameError)endconst_get可以在常量名称不能检索常量的情况下检索常量,这很有趣。是什么导致了rspec的奇怪行为?我正在使用MRI1.9.1和rspec2.8.0。症状同MRI1.8.7。 最佳答案 你想要extend,而不

ruby-on-rails - Rails - Devise Gem 删除注册和忘记密码模块

我使用Rails4和Devisegem进行用户身份验证,在我的项目中也可以很好地使用Devisegem。但我想删除Signup和ForgotPassword模块的功能。为了删除sign_up,在config/routes.rb文件中使用skip选项,例如,devise:users,:skip=>:registration它删除了sign_up模块也截断了路径生成。这很好。但同样,如果我为Forgotpassword添加此选项devise:users,:skip=>:recoverordevise:users,:skip=>:recoverable那是行不通的。我需要以相同的方法隐藏这两

Ruby:有没有办法获取类的封闭模块常量?

我正在用Ruby进行一些元编程,我需要在模块内动态生成一个同级类。这样做时,我想在模块上调用const_set,但直到运行时我才知道要调用哪个模块常量。一个例子:给定的类Foo::Bar::BazFoo::Quox::Quack我希望能够调用这样的函数(这里过于简单):defgenerate_fromklassmod=klass.enclosing_module#当使用Baz调用时,我最终想要的是一个定义为的新类Foo::Bar::GeneratedClassName还有嘎嘎,我想要Foo::Quox::GeneratedClassName我知道的唯一方法是拆分klass.name,然

ruby - 如何在 Ruby 中使用模块覆盖静态类方法?

moduleImodule???endclassSomeincludeImoduledefself.imethodputs"original"endendSome.imethod#=>"overrided"如何创建一个覆盖静态方法的模块?这是一道深入理解ruby特性的面试题。不要提出问题的另一种表述:) 最佳答案 好的,这是一个工作代码。请注意,您甚至不必触摸目标类!:)classKlassdefself.sayputs'class'endendmoduleFooModuledefself.includedbasebase.inst

ruby-on-rails - Rails 关注方法覆盖另一个关注方法不像普通模块那样工作

假设我在ruby​​中有以下结构(没有rails)moduleParentdeffputs"inparent"endendmoduleChilddeffsuperputs"inchild"endendclassAincludeParentincludeChildendA.new.f#prints=>#inparent#inchild现在使用rails时的问题moduleParentextendActiveSupport::Concernincludeddodeffputs"InParent"endendendmoduleChildextendActiveSupport::Concern