Scala 中缀符号的有趣行为

Scala 中缀符号的有趣行为,scala,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")) pr

一个人有时会躲在你的电脑屏幕后面,试图逃离你的女朋友。然而,我发现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)

没有编译器警告,并且该语句不会向控制台输出任何内容。请有人轻轻地解释一下(我宿醉了),为什么会这样。

这是因为:

println("Unisex names: ".+(boys).intersect(girls))
然后根据
-Xprint:typer
编译器选项,它将被重写如下:

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

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

谢谢Nikita,但是为什么它不至少打印这两个字符串的交集,应该是:
nisex姓名列表(Person(Jon)、Person(K)、Pero()、Pr()Al)
@JacobusR对不起,我第一次没有测试它。结果是魔法有点不同。查看更新。