8
|
Willis Blackburn · 技术社区 · 14 年前 |
1
3
创建一个从函数类型扩展而来的特性可能会很有用,原因有两个。
我希望这是清楚的。 |
2
8
如果您将它作为一种特性,并且仍然希望能够使用轻量级函数语法,那么还可以在需要它们的地方添加隐式转换:
|
3
1
听起来你可能想用 structural type . 它们也被称为隐式接口。
|
4
1
一个选项是定义一个类型(您仍然可以称之为Computable),此时它是Int=>当你需要可计算的东西时就用它。您将获得从Function1继承的所有好处。然后,如果你意识到你需要更多的方法,你可以改变类型的另一个特点。 首先:
它的一个缺点是,您定义的类型实际上不是新类型,而是一种别名。因此,除非将其更改为trait,否则编译器仍将接受其他Int=>Int函数。至少,你(开发人员)可以区分。当您更改为trait(并且差异变得很重要)时,编译器将发现您何时需要可计算但Int=>内景。 如果希望编译器拒绝其他Int=>Int-s,那么我建议使用trait,但extend Int=>当你需要调用它时,你仍然会有更方便的语法。 另一个选择可能是拥有一个trait和一个带有接受Int=>的apply方法的伴随对象;Int并由此创建一个可计算的。 然后,创建新的可计算表几乎和编写普通匿名函数一样简单,但仍然需要进行类型检查(隐式转换会使其失效)。此外,您可以毫无问题地混入trait(但是同伴对象的apply不能按原样使用)。 |
davidzxc574 · 将字符串缩放为字符 2 年前 |
yic_l · 什么是“!”在这个函数中是什么意思? 2 年前 |
Jelly · Scala:用于理解递归未来 2 年前 |
bbgghh · 在scala中连接两个列表时如何处理不匹配的键 2 年前 |
Iheb Mar · 卡夫卡制作人/消费者粉碎每一秒的API调用 2 年前 |
B. Bal · 在Scala中重用类成员 2 年前 |