标签: mixins

什么是mixin,为什么它们有用?

在" 编程Python "中,Mark Lutz提到了"mixins".我来自C/C++/C#背景,我之前没有听过这个词.什么是mixin?

这个例子的行之间进行读取(我已经链接到了因为它很长),我假设这是一个使用多重继承来扩展类而不是"正确"子类的情况.这是正确的吗?

为什么我要这样做而不是将新功能放入子类?就此而言,为什么mixin/multiple继承方法比使用组合更好?

mixin与多重继承的区别是什么?这仅仅是语义问题吗?

python oop multiple-inheritance mixins

875
推荐指数
16
解决办法
27万
查看次数

Sass - 将Hex转换为RGBa以获得背景不透明度

我有以下Sass mixin,它是RGBa示例的一半完整修改:

@mixin background-opacity($color, $opacity: .3) {
    background: rgb(200, 54, 54); /* The Fallback */
    background: rgba(200, 54, 54, $opacity);
} 
Run Code Online (Sandbox Code Playgroud)

我申请$opacity好了,但现在我被困在那个$color部分.我将发送到mixin的颜色将是HEX而不是RGB.

我的例子用途是:

element {
    @include background-opacity(#333, .5);
}
Run Code Online (Sandbox Code Playgroud)

如何在此mixin中使用HEX值?

css sass mixins background-color rgba

190
推荐指数
4
解决办法
13万
查看次数

Mixins vs. Traits

Mixins和Traits有什么区别?

根据维基百科,Ruby模块有点像特征.怎么会这样?

paradigms multiple-inheritance traits mixins

146
推荐指数
2
解决办法
2万
查看次数

ruby继承vs mixins

在Ruby中,既然你可以包含多个mixin但只扩展一个类,那么看起来mixins比继承更受欢迎.

我的问题:如果你正在编写必须扩展/包含的代码才有用,你为什么要把它变成一个类?换句话说,为什么你不总是把它变成一个模块?

我只能想到你想要一个类的一个原因,那就是你需要实例化这个类.但是,在ActiveRecord :: Base的情况下,您永远不会直接实例化它.所以不应该是一个模块而不是?

ruby inheritance module class mixins

125
推荐指数
5
解决办法
3万
查看次数

使用mixins vs组件在Facebook React中重用代码

我开始在Backbone项目中使用Facebook React,到目前为止它的表现非常好.
但是,我注意到我的React代码中出现了一些重复.

例如,我有几个类似于窗体的小部件,其状态为INITIAL,SENDINGSENT.按下按钮时,需要验证表单,发出请求,然后更新状态.this.state当然,状态保持在React内部,以及字段值.

如果这些是Backbone视图,我会提取一个被调用的基类,FormView我的印象是React既不支持也不支持子类化来共享视图逻辑(如果我错了,请纠正我).

我在React中看到了两种代码重用方法:

我是否认为mixin和容器比React中的继承更受欢迎?这是一个刻意的设计决定吗? 将mixin或容器组件用于第二段中的"表单小部件"示例会更有意义吗?

这里有一个要点FeedbackWidget,并JoinWidget在其当前状态.它们具有类似的结构,类似的beginSend方法,并且都需要一些验证支持(还没有).

javascript refactoring mixins reactjs

115
推荐指数
1
解决办法
3万
查看次数

SCSS mixin中if/else条件的语法

嗨,我正在尝试学习SASS/SCSS,并试图重构我自己的mixin for clearfix

我想要的是mixin是基于我是否通过mixin宽度.

到目前为止的想法(伪代码,因为我将包括其他mixins)

@mixin clearfix($width) {

   @if !$width {

    // if width is not passed, or empty do this

   } @else {

        display: inline-block;
        width: $width;
   }
}
Run Code Online (Sandbox Code Playgroud)

这就是我以为我可以称之为它,但它不起作用.

@include clearfix();

要么

@include clearfix(100%)

要么

@include clearfix(960px)

我会感谢任何有关最佳或正确方法的帮助!

conditional if-statement sass mixins

104
推荐指数
3
解决办法
15万
查看次数

Mixin vs继承

mixin和inheritance有什么区别?

oop inheritance mixins

90
推荐指数
4
解决办法
2万
查看次数

从Ruby中的modules/mixins继承类方法

众所周知,在Ruby中,类方法得到了继承:

class P
  def self.mm; puts 'abc' end
end
class Q < P; end
Q.mm # works
Run Code Online (Sandbox Code Playgroud)

然而,令我惊讶的是它不适用于mixins:

module M
  def self.mm; puts 'mixin' end
end
class N; include M end
M.mm # works
N.mm # does not work!
Run Code Online (Sandbox Code Playgroud)

我知道#extend方法可以做到这一点:

module X; def mm; puts 'extender' end end
Y = Class.new.extend X
X.mm # works
Run Code Online (Sandbox Code Playgroud)

但我正在编写一个包含实例方法和类方法的mixin(或者,更愿意写):

module Common
  def self.class_method; puts "class method here" end
  def instance_method; puts "instance method here" end
end
Run Code Online (Sandbox Code Playgroud)

现在我想做的是:

class A; include Common
  # custom …
Run Code Online (Sandbox Code Playgroud)

ruby mixins

89
推荐指数
3
解决办法
4万
查看次数

Mixins vs scala中的成分

在java世界中(更确切地说,如果你没有多重继承/ mixins),经验法则很简单:"赞成对象组合而不是类继承".

如果你还考虑mixins,我想知道它是否/如何改变,特别是在scala中?
mixins被认为是多重继承的方式,还是更多的类组合?
是否还有一个"赞成对象组成超类组成"(或其他方式)指南?

当人们使用(或滥用)mixins时,我已经看到了一些例子,当对象组合也可以完成这项工作时,我并不总是确定哪一个更好.在我看来,你可以用它们实现非常相似的东西,但也有一些差异,一些例子:

  • 可见性 - 使用mixins,一切都成为公共API的一部分,而不是组合的情况.
  • 冗长 - 在大多数情况下,mixins不那么冗长,也更容易使用,但情况并非总是如此(例如,如果你也在复杂的层次结构中使用自我类型)

我知道简短的回答是"它取决于",但可能有一些典型的情况,当这个或那个更好.

到目前为止,我可以提出一些指导原则(假设我有两个特征A和B,A想要使用B中的一些方法):

  • 如果你想用B中的方法扩展A的API,那么就是mixins,否则就是组合.但是,如果我创建的类/实例不是公共API的一部分,它就无济于事.
  • 如果你想使用一些需要mixins的模式(例如Stackable Trait Pattern),那么这是一个简单的决定.
  • 如果你有循环依赖,那么mixins与self类型可以提供帮助.(我尽量避免这种情况,但这并不容易)
  • 如果你想要一些动态的,运行时决定如何组合然后对象组合.

在很多情况下,mixins似乎更容易(和/或更简洁),但我很确定它们也有一些陷阱,比如"神级"和其他两篇artima文章中描述的其他:第1 部分,第2部分(BTW it在我看来,大多数其他问题与scala不相关/不那么严重.

你有更多这样的提示吗?

scala composition mixins

77
推荐指数
2
解决办法
8391
查看次数

什么是Mixins(作为一个概念)

我试图了解Mixin概念,但我似乎无法理解它是什么.我看待它的方式是,它是一种通过使用继承来扩展类的功能的方法.我读过人们将它们称为"抽象子类".有谁能解释为什么?

如果您根据以下示例(从我的一个演讲幻灯片中)解释您的答案,我将不胜感激: C++ Mixin示例

c++ oop templates mixins

70
推荐指数
4
解决办法
3万
查看次数