Scala 为什么不';t';ints&x27;铸造至';多头';在斯卡拉

Scala 为什么不';t';ints&x27;铸造至';多头';在斯卡拉,scala,map,int,long-integer,type-inference,Scala,Map,Int,Long Integer,Type Inference,为什么我需要在地图中的每个键后写“L”才能有一个地图[Long,…]?还有其他不那么冗长的方式吗 private[this] val periodById: Map[Long, X] = Map( 1L -> OneSecond, 4L -> TenSecond, 5L -> ThirtySecond, 10L -> OneMinute, 50L -> FiveMinutes, 100L -> TenMinute

为什么我需要在地图中的每个键后写“L”才能有一个地图[Long,…]?还有其他不那么冗长的方式吗

private[this] val periodById: Map[Long, X] = Map(
    1L -> OneSecond,
    4L -> TenSecond,
    5L -> ThirtySecond,
    10L -> OneMinute,
    50L -> FiveMinutes,
    100L -> TenMinutes
)

因为你需要两个暗示。以下是:

某物->到某物

语法隐式转换为a对。Int到long是另一种编译时隐式转换

private[this] val periodById: Map[Long, X] = Map(
  (1, OneSecond),
  (4, TenSecond)
)
应该有用。工作表给出了:

val m: Map[Long, Int] = Map((4, 5), (3, 2))
//> m  : Map[Long,Int] = Map(4 -> 5, 3 -> 2)
//My note the Worksheet is using Tuple2's to String method to display the x -> y notation.
m.getClass.getName
//> res1: String = scala.collection.immutable.Map$Map2
m.head.getClass.getName
//> res1: String = scala.Tuple2
作为一个简单的一般规则,Scala一次只允许一个隐式转换。如果它不完全疯狂,那么所有编译时类型安全性都将丢失


如果您发现必须大量编写这种语法,您可以创建一个简单的工厂方法,将int转换为long。如果它的性能非常关键,那么您可以编写一个宏来转换。

这会极大地损害语言的美观,保留初始语法可以实现吗?工作表/repl显示没有什么神奇之处。
1L
toString
1
“x”
toString是
x
,而
Map
toString
恰好使用了
作为分隔符。没有要求对象的
toString
与您在中构造它的方式相同code@LuigiPlinge我不知道我会相应地调整我的答案。