有特点
trait Persisted {
def id: Long
}
Run Code Online (Sandbox Code Playgroud)
如何实现一个接受任何case类实例的方法并返回其特征混合的副本?
该方法的签名如下:
def toPersisted[T](instance: T, id: Long): T with Persisted
Run Code Online (Sandbox Code Playgroud) 我非常熟悉接口和抽象类的概念,但不熟悉mixins的概念.
现在,在Dart中,每个类都A定义了一个隐式接口,可以B通过使用implements关键字由另一个类实现.没有明确的方式来声明接口,例如,在Java中,接口只包含未实现的方法(最终是静态变量).在Dart中,由于接口是由类定义的,接口的方法A实际上可能已经实现,但实现的类B仍然需要覆盖这些实现.
我们可以从以下代码中看到这种情况:
class A {
void m() {
print("method m");
}
}
// LINTER ERROR: Missing concrete implementation of A.m
// Try implementing missing method or make B abstract.
class B implements A {
}
Run Code Online (Sandbox Code Playgroud)
在Dart中,mixin也是通过普通的类声明来定义的......
...原则上,每个类都定义了一个可以从中提取的mixin.但是,在此提议中,mixin只能从没有声明构造函数的类中提取.这种限制避免了由于需要在继承链上传递构造函数参数而引起的复杂化.
mixin基本上是一个可以定义未实现或实现的方法的类.这是一种将方法添加到另一个类而无需逻辑上使用继承的方法.在Dart中,mixin应用于超类,通过"正常"继承扩展,如下例所示:
class A {
void m() {
print("method m");
}
}
class MyMixin {
void f(){
print("method f");
}
}
class B extends A with MyMixin {
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们应该注意到,B …
我正在尝试为过渡创建一个sass mixin.这就是我到目前为止所拥有的.
@mixin transition($var)
-webkit-transition: $var
transition: $var
Run Code Online (Sandbox Code Playgroud)
我希望能够像这样传递多个参数
@include transition(color .5s linear, width .5s linear)
Run Code Online (Sandbox Code Playgroud)
不幸的是,我收到以下错误
Syntax error: Mixin transition takes 1 argument but 2 were passed.
Run Code Online (Sandbox Code Playgroud)
有没有办法这样做,所以它在css中产生以下输出,同时仍然接受一个未定义数量的参数?
-webkit-transition: color .5s linear, width .5s linear;
transition: color .5s linear, width .5s linear;
Run Code Online (Sandbox Code Playgroud) 是否可以在运行时向对象实例(不是类!)添加基类?关于如何Object#extend在Ruby中工作的一些方面:
class Gentleman(object):
def introduce_self(self):
return "Hello, my name is %s" % self.name
class Person(object):
def __init__(self, name):
self.name = name
p = Person("John")
# how to implement this method?
extend(p, Gentleman)
p.introduce_self() # => "Hello, my name is John"
Run Code Online (Sandbox Code Playgroud) 我有这个mixin来处理一个简单的CSS3线性渐变:
@mixin linear-gradient($from, $to, $dir: bottom, $dir-webkit: top, $ie-filters: false) {
background-color: $to;
background-image: -webkit-linear-gradient($dir-webkit, $from, $to);
background-image: linear-gradient(to $dir, $from, $to);
@if $ie-filters == true and $old-ie {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($from)}', endColorstr='#{ie-hex-str($to)}');
}
}
Run Code Online (Sandbox Code Playgroud)
$dir 是'方向'的缩写.
如果我需要制作$ie-filters'true'并且我不需要更改$dir/ $dir-webkit默认值,我仍然需要重新声明它们,这显然不是非常干燥和最佳,所以我必须这样做:
@include linear-gradient(#7a7a7a, #1a1a1a, bottom, top, true);
当我想要这样做时:
@include linear-gradient(#7a7a7a, #1a1a1a, true);
调用mixin时如何以这种方式跳过参数?
PS如果你想知道$dir-webkitWebkit 的论点,因为它仍然没有处理新的渐变语法(参见:http://generatedcontent.org/post/37949105556/updateyourcss3 - > 新的渐变语法),方向需要与标准语法相反.
我已经看到了关于是否可以在C#中创建mixins的各种问题,并且它们经常被引导到codeplex上的重新混合项目.但是,我不知道我是否喜欢"完整界面"的概念.理想情况下,我会像这样扩展一个类:
[Taggable]
public class MyClass
{
....
}
Run Code Online (Sandbox Code Playgroud)
通过简单地添加Taggable接口,我可以通过某种对象工厂创建MyClass类型的对象.返回的实例将包含MyClass中定义的所有成员以及通过添加标记属性(如标记集合)提供的所有成员.使用C#4.0(动态关键字)似乎很容易做到这一点.重组项目使用C#3.5.有没有人有任何好方法通过C#4.0扩展对象而不改变类本身?谢谢.
升级到 Flutter 3.10(和 Dart 3)后,我收到此错误:
类“PreferredSizeWidget”不能用作 mixin,因为它既不是 mixin 类也不是 mixin。
当前版本的代码:
class MyAppBar extends StatelessWidget with PreferredSizeWidget {
...
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含在另一个模块中的模块,它们都实现了相同的方法.我想存根包含模块的方法,如下所示:
module M
def foo
:M
end
end
module A
class << self
include M
def foo
super
end
end
end
describe "trying to stub the included method" do
before { allow(M).to receive(:foo).and_return(:bar) }
it "should be stubbed when calling M" do
expect(M.foo).to eq :bar
end
it "should be stubbed when calling A" do
expect(A.foo).to eq :bar
end
end
Run Code Online (Sandbox Code Playgroud)
第一个测试是通过,但第二个测试输出:
Failure/Error: expect(A.foo).to eq :bar
expected: :bar
got: :M
Run Code Online (Sandbox Code Playgroud)
为什么在这种情况下存根不工作?有没有不同的方法来实现这一目标?
谢谢!
------------------------------------- UPDATE ------------ ----------------------
谢谢!使用allow_any_instance_of(M)解决了这个问题.我的下一个问题是 - 如果我使用prepend而不包括会发生什么?请参阅以下代码:
module M
def …Run Code Online (Sandbox Code Playgroud)