在Scala中增加Short类型变量的最简洁方法是什么?

时间:2015-08-06 21:46:51

标签: scala primitive primitive-types

我最近在Scala中实现二进制网络协议。数据包中的许多字段自然地映射到Scala Shorts。我想简要地增加Short变量(不是值)。理想情况下,我想要s += 1(适用于 Ints )。

scala> var s = 0:Short
s: Short = 0

scala> s += 1
<console>:9: error: type mismatch;
 found   : Int
 required: Short
              s += 1
                ^

scala> s = s + 1
<console>:8: error: type mismatch;
 found   : Int
 required: Short
       s = s + 1
             ^

scala> s = (s + 1).toShort
s: Short = 1

scala> s = (s + 1.toShort)
<console>:8: error: type mismatch;
 found   : Int
 required: Short
       s = (s + 1.toShort)
              ^

scala> s = (s + 1.toShort).toShort
s: Short = 2

+=未定义Short运算符,因此在添加之前似乎隐式转换sInt。此外,Short的+运算符返回Int。 以下是Ints的工作原理:

scala> var i = 0
i: Int = 0

scala> i += 1

scala> i
res2: Int = 1

现在我将使用s = (s + 1).toShort

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

您可以定义一个将Int转换为Short的隐式方法:

scala> var s: Short = 0
s: Short = 0

scala> implicit def toShort(x: Int): Short = x.toShort
toShort: (x: Int)Short

scala> s = s + 1
s: Short = 1

编译器将使用它来使类型匹配。请注意,虽然implicits也有缺陷,但某些地方你可能会发生转换,甚至不知道原因,只是因为该方法是在范围内导入的,代码可读性也会受到影响。