##文档的含义是"盒装数字"?

时间:2015-10-01 12:47:47

标签: scala

当他们说" 盒装数字类型"时,scala docs for Any@##的含义是什么?

文档的引用是(突出我的):

  

等同于x.hashCode盒装数字类型和null。 对于数字,它会返回...

  1. 我认为" for numerics "应阅读" 盒装数字"?
  2. 什么是盒装数字 - 例如,它们是Boxed[Int]吗?
  3. 在阅读Synthetic Function “##” in scala

    后出现了这个问题

    我认为value type is a subtype of scala.AnyVal并没有作为对象实现,因此没有装箱

1 个答案:

答案 0 :(得分:2)

SELECT DISTINCT T0.DocNum, T0.Status, T1.ItemCode, T2.ItemName, T1.PlannedQty, T0.PlannedQty AS 'Net Quantity' FROM OWOR T0 INNER JOIN WOR1 T1 ON T0.DocEntry = T1.DocEntry INNER JOIN OITM T2 ON T0.ItemCode = T2.ItemCode WHERE T0.Status = 'L' AND T1.ItemCode IN ('BYP/RM/001', 'BYP/RM/002', 'BYP/RM/003', 'BYP/RM/004','BILLET') AND T2.ItmsGrpCod = 111 AND (T0.PostDate BETWEEN (SELECT Dateadd(month, Datediff(month, 0, {?EndDate}), 0)) AND {?EndDate}) 方法是为hashCode(或java.lang.Object)定义的,但对于原始("未装箱")类型没有等效方法。当您在基元上调用scala.AnyRef时,您将拥有盒装类型的哈希码,例如

hashCode

此处3.0自动装箱到3.0.hashCode // 1074266112 ,从而提供java.lang.Double方法。

Scala添加hashCode以允许正确比较基元,例如

##

这是因为3 == 3.0 // true 与此处的哈希码不同:

##

对于参考值,3.0.## // 3 ! 的行为与##相同:

hashCode