草庐IT

c++ - 什么是 C++ Mixin 风格?

我刚刚遇到了这个关键字C++Mixin-Style,有谁知道这是什么?在thispost,已作为设计模式回答。是否与thisdocument中描述的设计模式相同?? 最佳答案 Mixins是来自Lisp的一个概念。来自Dr.Dobbs的一个很好的解释:Amixinisafragmentofaclassinthesensethatitisintendedtobecomposedwithotherclassesormixins.[...]Thedifferencebetweenaregular,stand-aloneclass(such

c++ - 什么是 Mixin(作为一个概念)

我试图理解Mixin的概念,但我似乎无法理解它是什么。我认为它是一种通过使用继承来扩展类功能的方法。我读过人们将它们称为“抽象子类”。谁能解释一下为什么?如果您能根据以下示例(来self的演讲幻灯片之一)解释您的答案,我将不胜感激: 最佳答案 在讨论什么是混合之前,先描述一下它试图解决的问题是很有用的。假设您有一堆要建模的想法或概念。它们可能以某种方式相关,但它们在很大程度上是正交的——这意味着它们可以彼此独立地独立存在。现在,您可以通过继承对此进行建模,并让这些概念中的每一个都派生自某个公共(public)接口(interface

ruby - 在mixin中包含一个mixin

我想做这样的事情:moduleMixindefself.included(base)base.includeAnotherMixin...endend给出了错误NoMethodError-privatemethod`include'calledforClass如何在mixin中包含mixin以在我定义的方法中使用? 最佳答案 HowcanIincludeamixininsideamixintouseinthemethodsI'mdefining?错误消息清楚地告诉您,#include是一个私有(private)方法,因此在Ruby中

使用 include 和 extend 的 Ruby 模块 mixin - 它是如何工作的?

以下是代码片段:模块:ActiveSupport::ConcernmoduleActiveSupportmoduleConcerndefself.extended(base)base.instance_variable_set("@_dependencies",[])enddefappend_features(base)ifbase.instance_variable_defined?("@_dependencies")base.instance_variable_get("@_dependencies")自定义模块:GeneralScopesmoduleGeneralScopesex

ruby - RSpec - 模拟(或 stub )覆盖的 mixin 方法

我有这样的情况:moduleSomethingdefmy_methodreturn:some_symbolendendclassMyClassincludeSomethingdefmy_methodifxxx?:other_symbolelsesuperendendend现在问题出在测试上——我想确保从覆盖方法调用super方法并将其stub,以便我可以测试方法的其他部分。我如何使用RSpec模拟来实现这一点? 最佳答案 确保super被调用听起来很像测试实现,而不是行为,并且模拟被测对象无论如何都不是一个好主意。我建议只明确指定不

ruby-on-rails - 在 ruby​​ 中测试 mixin

我正在尝试为混合类编写rspec测试。我有以下内容。moduleonemoduletwodefmethodmethod_details=superifmethod_details.a&&method_details.bsomethingelsifmethod_details.banotherthingelselastthingendendendend现在我已经模拟了将传递给类的“方法”对象。但我正在努力访问super方法。我做到了,let(:dummy_class){Class.new{includeone::two}}如何传递模拟method反对这个虚拟类?我该如何进行测试?ruby

ruby - rubyists 是否从 mixin 中引用访问器?

从混合方法中引用扩展对象的访问器是否被认为是不好的做法?一个简单的例子:moduleWindInstrumentdefplaymouthpiece.blow#requiresamouthpieceendendclassSaxophoneattr_reader:mouthpiecedefinitialize@mouthpiece=Mouthpiece.newendincludeWindInstrumentendSaxophone.new.play在这种情况下,我实际上只是将对喉舌的要求直接移至WindInstrument模块,但在更复杂的情况下,访问器驻留在扩展对象上真的有意义吗?这只是

Ruby,mixin 实例变量和方法

我有两个文件,一个带有模块ToMix:moduleToMix@module_var="modulevar"defself.mix_functionputs"mix_functionSELF:#{@module_var}"enddefmix_functionputs"mix_function:#{@module_var}"endclassMixClassattr_accessor:mixclassvardefinitialize(value)@mixclassvar=valueendendend我想将其混合到另一个文件中的类TestInclude中:classTestIncludereq

ruby-on-rails - 从 mixin 访问类名

在我的Rails项目中,我将全局设置存储在一个字符串索引哈希中,其中每个类(模型)都有一个用于其自己设置的“命名空间”。例如,新闻模型可能具有设置“news.stories_per_page”或“news.show_date”。为了避免在任何地方都进行名称修改,我有一个mixin,它提供了用于访问这些设置的通用类方法。使用这个mixin,我可以使用如下代码访问“news.show_date”:News.setting:show_date=>true现在,问题来了。为了生成字符串“news.show_date”,我需要知道混合我的模块的模型的类名。但是在类方法中,self.class=>

ruby - 在实例方法中使用 mixin 方法

为什么这不起作用:classMyclassincludeHTTPartydefdosomethingbase_uri("some_url")endendbase_uri方法是HTTParty的一个类方法。如果我从我的类、任何实例方法之外或从类方法调用它,它工作正常,但是当尝试从实例方法调用它时,我得到“NoMethodError:undefinedmethod`base_uri'for#”为什么?难道不应该有某种方法从我的实例方法中引用HTTParty类,以便我可以调用该HTTParty类方法吗?我可以将其更改为类方法,但这样我的类的每个实例都将具有相同的base_uri值。