加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – AnyVal的目的是什么?

发布时间:2020-12-16 18:24:49 所属栏目:安全 来源:网络整理
导读:我想不出AnyVal类型会有用的任何情况,尤其是添加Numeric类型以便在Int,Long等上进行抽象.是否有任何AnyVal的实际用例,或者它只是一个制作的工件类型层次结构有点漂亮吗? 只是为了澄清,我知道AnyVal是什么,我想不出任何时候我真的需要它在Scala中.什么时候我
我想不出AnyVal类型会有用的任何情况,尤其是添加Numeric类型以便在Int,Long等上进行抽象.是否有任何AnyVal的实际用例,或者它只是一个制作的工件类型层次结构有点漂亮吗?

只是为了澄清,我知道AnyVal是什么,我想不出任何时候我真的需要它在Scala中.什么时候我需要一个包含Int,Character和Double的类型?似乎只是在那里使类型层次更漂亮(即,将AnyVal和AnyRef作为兄弟,而不是让Int,Character等直接从Any继承)看起来更好.

解决方法

我们去录像带,呃,规范12.2:

Value classes are classes whose instances are not represented as
objects by the underlying host system. All value classes inherit from
class AnyVal.

所以,也许问题是,如果一切都是一个对象,为什么我不关心某些东西是否被表示,即实现为一个对象?这是实现细节中的实现.

但是,我们不要假装,当然你关心.你从不专攻吗?

规范继续:

Scala implementations need to provide the value classes Unit,Boolean,
Double,Float,Long,Int,Char,Short,and Byte (but are free to
provide others as well).

因此,除了所需值类的枚举之外,对AnyVal的测试是有意义的.

也就是说,你必须接受@ drexin的答案,因为如果你没有使用值类进行扩展方法,那么你就不会真正生活. (从某种意义上讲,生活起来.)

SIP的动机:

…classes in Scala that can get completely inlined,so operations on
these classes have zero overhead compared to external methods. Some
use cases for inlined classes are:

  1. Inlined implicit wrappers. Methods on those wrappers would be
    translated to extension methods.
  2. New numeric classes,such as unsigned ints. There would no longer
    need to be a boxing overhead for such classes. So this is similar to
    value classes in .NET.
  3. Classes representing units of measure. Again,no boxing overhead
    would be incurred for these classes.

您可以将扩展方法本身标记为@inline,并且所有内容都是内联的:没有对象包装器,并且您的小方法是内联的.

我每天都使用这个功能.昨天我遇到了一个bug.该错误已经修复.这就是说它是一个很酷的功能,Scala人会从Coursera中抽出时间来消除它中的一个小错误.

这让我想起,我忘了问,这不是Coursera测验问题,是吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读