我有以下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值?
Mixins和Traits有什么区别?
根据维基百科,Ruby模块有点像特征.怎么会这样?
在Ruby中,既然你可以包含多个mixin但只扩展一个类,那么看起来mixins比继承更受欢迎.
我的问题:如果你正在编写必须扩展/包含的代码才有用,你为什么要把它变成一个类?换句话说,为什么你不总是把它变成一个模块?
我只能想到你想要一个类的一个原因,那就是你需要实例化这个类.但是,在ActiveRecord :: Base的情况下,您永远不会直接实例化它.所以不应该是一个模块而不是?
我开始在Backbone项目中使用Facebook React,到目前为止它的表现非常好.
但是,我注意到我的React代码中出现了一些重复.
例如,我有几个类似于窗体的小部件,其状态为INITIAL,SENDING和SENT.按下按钮时,需要验证表单,发出请求,然后更新状态.this.state当然,状态保持在React内部,以及字段值.
如果这些是Backbone视图,我会提取一个被调用的基类,FormView但我的印象是React既不支持也不支持子类化来共享视图逻辑(如果我错了,请纠正我).
我在React中看到了两种代码重用方法:
我是否认为mixin和容器比React中的继承更受欢迎?这是一个刻意的设计决定吗? 将mixin或容器组件用于第二段中的"表单小部件"示例会更有意义吗?
这里有一个要点FeedbackWidget,并JoinWidget在其当前状态.它们具有类似的结构,类似的beginSend方法,并且都需要一些验证支持(还没有).
嗨,我正在尝试学习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)
我会感谢任何有关最佳或正确方法的帮助!
众所周知,在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) 在java世界中(更确切地说,如果你没有多重继承/ mixins),经验法则很简单:"赞成对象组合而不是类继承".
如果你还考虑mixins,我想知道它是否/如何改变,特别是在scala中?
mixins被认为是多重继承的方式,还是更多的类组合?
是否还有一个"赞成对象组成超类组成"(或其他方式)指南?
当人们使用(或滥用)mixins时,我已经看到了一些例子,当对象组合也可以完成这项工作时,我并不总是确定哪一个更好.在我看来,你可以用它们实现非常相似的东西,但也有一些差异,一些例子:
我知道简短的回答是"它取决于",但可能有一些典型的情况,当这个或那个更好.
到目前为止,我可以提出一些指导原则(假设我有两个特征A和B,A想要使用B中的一些方法):
在很多情况下,mixins似乎更容易(和/或更简洁),但我很确定它们也有一些陷阱,比如"神级"和其他两篇artima文章中描述的其他:第1 部分,第2部分(BTW it在我看来,大多数其他问题与scala不相关/不那么严重.
你有更多这样的提示吗?
我试图了解Mixin概念,但我似乎无法理解它是什么.我看待它的方式是,它是一种通过使用继承来扩展类的功能的方法.我读过人们将它们称为"抽象子类".有谁能解释为什么?
如果您根据以下示例(从我的一个演讲幻灯片中)解释您的答案,我将不胜感激:

mixins ×10
oop ×3
inheritance ×2
ruby ×2
sass ×2
c++ ×1
class ×1
composition ×1
conditional ×1
css ×1
if-statement ×1
javascript ×1
module ×1
paradigms ×1
python ×1
reactjs ×1
refactoring ×1
rgba ×1
scala ×1
templates ×1
traits ×1