问题标签 [value-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 您如何在没有开销的情况下丰富价值类别?
Scala 2.10 引入了值类,您可以通过使类扩展来指定它们AnyVal
。值类有很多限制,但它们的巨大优势之一是它们允许扩展方法而不会产生创建新类的惩罚:除非需要装箱,例如将值类放入数组中,否则它只是旧类加上一组将类作为第一个参数的方法。因此,
展开到不会比自己编写更昂贵的i + j*j
东西(一旦 JVM 内联方法调用)。
不幸的是,SIP-15中描述值类的限制之一是
- C 的基础类型可能不是值类。
如果你有一个值类,你可以得到你的手,比如说,作为一种提供类型安全单元的方法,而不需要装箱的开销(除非你真的需要它):
那么有没有办法在Meter
没有对象创建开销的情况下丰富呢?SIP-15 中的限制阻止了明显的
方法。
performance - 隐式值类中的继承是否会引入开销?
我想将 scala 的值类应用于我的一个项目,因为它们使我能够在没有大量开销的情况下丰富某些原始类型(我希望如此)并保持类型安全。
我的问题:每当我使用对象时,继承是否会Ordered
强制分配Pos
对象(从而引入巨大的开销)?如果是这样:有没有办法绕过这个?
arrays - 值类中的 CLI 数组初始化
我知道值类没有默认构造函数,因为编译器将此类中的所有元素初始化为零。但是值类中的数组未初始化:
我只能作弊并使用:
但必须有另一种解决方案。
有人可以告诉我如何解决这个问题吗?
scala - Value classes introduce unwanted public methods
Looking at some scala-docs of my libraries, it appeared to me that there is some unwanted noise from value classes. For example:
This introduces an unwanted symbol i
:
That stuff appears both in the scala docs and in the IDE auto completion which is really not good.
So... any ideas of how to mitigate this problem? I mean you can use RichInt(val self: Int)
but that doesn't make it any better (4.self
, wth?)
EDIT:
In the following example, does the compiler erase the intermediate object, or not?
scala - Scala:识别值类的对象
我正在反思地调用一个方法,其参数可能是也可能不是value class的实例。由于值类的目的是避免基础值的装箱,如果参数类型是值类,那么所讨论的方法实际上将期望未装箱的值。为了处理这种情况,我试图从值类中解开基础值。我首先需要确定参数是否属于值类,在这里我遇到了第一个绊脚石:
这不能按预期工作,因为该方法返回true
:
可以如何isObjectOfValueClass
实施?或者是否有一种更简单的方法来反射调用可能将值类的对象作为参数的方法?
scala - 链接值类调用
是否可以在没有实际实例化的情况下链接值类?例如:
用例:
在调用b.clientProps +=
中,是否ClientProperties
被实例化,或者这些只是纯静态(优化)方法调用?
scala - 使用部分函数参数方法的基类型的 Scala 值类编译失败
说,我定义了一个值类如下
编译失败并显示以下消息:
错误消息对我来说似乎没有那么有意义,就像我替换collect
为map
(需要一个函数而不是部分函数)或类不扩展AnyVal
,代码片段将编译。
任何人都可以解释背后的原因或链接到提交的问题吗?
scala - 使用宏扩展元素的类型类操作
假设以下设置:
有没有办法在适当的隐式上下文中直接扩展m op n
为,使用宏或至少避免额外的对象创建?a.op(m,n)
a
A
java - 集合中 Scala.Long 和 Java.lang.Long 之间的隐式转换
我正在使用 JavaConverters 从 Java SortedSet 转到 Vector。
我的 getInstructions 函数返回 java.lang.Long 的 ArrayList,但使用代码需要 Scala.Long。有没有办法在不改变我所有的消费代码来使用 Java.lang.Long 的情况下做到这一点?
此外,有没有办法对值类进行隐式转换以允许随机访问 ArrayList 而无需像上面那样分配额外的对象?非常感谢您提供的任何见解。
scala - 为什么我不能在 Scala 中重写将值类作为参数的方法?
我在 Scala 2.10.3 中使用值类(扩展 AnyVal 的类),但是在将它们用作抽象方法的参数时遇到了一个奇怪的编译器错误。如以下示例所示:
编译器吐出以下错误:
为什么这不起作用?有没有办法将值类传递给抽象方法?