使用中缀表示法的有趣行为

时间:2014-05-29 04:29:43

标签: scala

人们有时会试图通过躲在电脑屏幕后离开你的女朋友。但是,我发现Scala有时候和我的女孩完全一样......

这将打印两个列表之间的交集:

  val boys = List(Person("John"), Person("Kim"), Person("Joe"), Person("Piet"), Person("Alex"))

  val girls = List(Person("Jana"), Person("Alex"), Person("Sally"), Person("Kim"))

  println("Unisex names: " + boys.intersect(girls))

这绝不打印:

  val boys = List(Person("John"), Person("Kim"), Person("Joe"), Person("Piet"), Person("Alex"))

  val girls = List(Person("Jana"), Person("Alex"), Person("Sally"), Person("Kim"))

  println("Unisex names: " + boys intersect girls)

没有编译器警告,该语句完全没有打印到控制台。有人可以请轻轻解释(我有宿醉),为什么会这样。

1 个答案:

答案 0 :(得分:10)

对此感到害怕:

println("Unisex names: ".+(boys).intersect(girls))

然后根据-Xprint:typer编译器选项重写它:

println(augmentString("Unisex names: ".+(boys.toString)).intersect[Any](girls))

其中augmentString是从String类型到StringOps的隐式转换,它提供intersect方法。