jjzjj

ruby - Ruby 中的 'include' 和 'prepend' 有什么区别?

来自ModuleModule#append_features(mod)→mod=>Whenthismoduleisincludedinanother,Rubycallsappend_featuresinthismodule,passingitthereceivingmoduleinmod.Ruby’sdefaultimplementationistoaddtheconstants,methods,andmodulevariablesofthismoduletomodifthismodulehasnotalreadybeenaddedtomodoroneofitsancestors.Mo

ruby - 我如何混入 Singleton 来创建一个接受初始化参数的类?

我已经了解了如何将类定义为单例(howtocreateasingletoninRuby):require'singleton'classExampleincludeSingletonend但是如果我想在初始化单个实例时将一些参数传递给#new怎么办?示例应始终初始化某些属性。例如,假设我有一个类,其唯一目的是记录到一个文件,但它需要一个要记录到的文件的名称才能工作。classMyLoggerdefinitialize(file_name)@file_name=file_nameendend我怎样才能使MyLogger成为单例,但确保它获得一个文件名? 最佳答

ruby - 是否可以在 ruby​​ 中包含每个对象的模块?

是否可以在ruby​​中为每个实例包含模块?即在Scala中,您可以执行以下操作。valobj=newMyClasswithMyTrait你能在ruby​​中做类似的事情吗,也许类似于下面的事情?obj=Object.newincludeMyModule 最佳答案 是的,你可以:obj=Object.newobj.extendMyModule 关于ruby-是否可以在ruby​​中包含每个对象的模块?,我们在StackOverflow上找到一个类似的问题: h

ruby-on-rails - "The Ruby way"(mixins 和类重新打开)与依赖注入(inject)

在研究混合与依赖注入(inject)时,我经常听到“Ruby方式”这个词。开发人员通常会说一些类似的话Rubyletsyoureopenclassesandredefinemethodsmeansthatyoucaneasily"inject"newreferencesintoyourcodeattest-time.(参见http://weblog.jamisbuck.org/2007/7/29/net-ssh-revisited的#6)但是测试不是我主要关心的;我关心的是类重用。我想要可以在多个企业级Rails应用程序中重用的类。那么重用类发生了什么?使用mixins和重新打开类似乎

ruby - Traits vs. Interfaces vs. Mixins?

traits、mixins和interfaces之间有什么相同点和不同点。我试图更深入地了解这些概念,但我对实现这些功能的编程语言知之甚少,无法真正理解异同。对于每个特征、混入和接口(interface)解决的问题是什么?概念的定义在不同编程语言中是否一致?它和其他的有什么相似之处?它和其他的有什么区别? 最佳答案 每个referencetype在Java中,除了Object,都派生自一个父类(superclass)。顺便说一句,Java类可以实现零个或多个接口(interface)。一般来说,接口(interface)是描述实现类

ruby-on-rails - 将在多个模型中找到的通用代码放在哪里?

我有两个包含相同方法的模型:deffoo#dosomethingend我应该把它放在哪里?我知道常用代码位于Rails应用程序的lib目录。但是如果我把它放在lib中一个名为“Foo”的新类中,我需要将它的功能添加到我的两个ActiveRecord模型,我是这样做的吗:classA然后A和B都将包含foo方法,就好像我在每个方法中都定义了它一样? 最佳答案 创建一个模块,你可以把它放在lib目录下:moduleFoodeffoo#dosomethingendend然后您可以在每个模型类中包含该模块:classAA和B模型现在将定义一

ruby-on-rails - 跨多个文件打破 ruby​​ 模块

我有一个ruby​​模块,它应该包含很多类moduleAclassFirst#somemethodsendclassSecond#somemethodsendclassThird#somemethodsendend我想在Rails中做的是将这些类分解成几个文件,将这个巨大的模块分解成几个相关文件的最佳做法可能是什么? 最佳答案 一种方法是提出这样的目录结构:(rootdir)├──a│  ├──first.rb│  ├──second.rb│  └──third.rb└──a.rb文件内容:#a.rbrequire_relative

ruby - Objective-C 是否像 Ruby 一样支持 Mixin?

在Ruby中,有模块,您可以通过“混入”模块来扩展类。moduleMyModuledefprintoneprint"one"endendclassMyClassincludeMyModuleendtheOne=MyClass.newtheOne.printone>>one在Objective-C中,我发现我有一组常用的方法,我想要一些Class来“继承”。在不创建通用类并从该通用类派生所有内容的情况下,还有哪些其他方法可以实现这一目标? 最佳答案 不要脸的外挂:ObjectiveMixin它利用了Objective-C运行时在运行时

ruby - 有没有办法用 Rspec stub 包含模块的方法?

我有一个模块包含在另一个模块中,它们都实现了相同的方法。我想stub包含模块的方法,如下所示:moduleMdeffoo:MendendmoduleAclass第一个测试通过,但第二个输出:Failure/Error:expect(A.foo).toeq:barexpected::bargot::M为什么stub在这种情况下不起作用?有没有不同的方法来实现这一目标?谢谢!------------------------------------更新----------------------------------谢谢!使用allow_any_instance_of(M)解决了这个问题。

Ruby:模块、要求和包含

我正在尝试使用Ruby模块(mixins)。我有test.rb:#!/usr/bin/envrubyrequire_relative'lib/mymodule'classMyAppincludeMyModuleself.halloend和lib/mymodule.rb:moduleMyModuledefhalloputs"hallo"endend设置非常简单。但它不起作用:(:rubytest.rbtest.rb:8:in`':undefinedmethod`hallo'forMyApp:Class(NoMethodError)fromtest.rb:6:in`'我的错误在哪里?