Scala 中缀符号的有趣行为
一个人有时会躲在你的电脑屏幕后面,试图逃离你的女朋友。然而,我发现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
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对不起,我第一次没有测试它。结果是魔法有点不同。查看更新。