我想Scala的改写&&,以and下面的方式(我喜欢蟒蛇,这就是为什么我试图做到这一点):
def and(p1: () => Boolean, p2: () => Boolean): Boolean = p1() && p2()
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用它时,例如:
def and(p1: () => Boolean, p2: () => Boolean): Boolean = p1() && p2()
if ((l < h.length) and (h(l) > h(i)))
Run Code Online (Sandbox Code Playgroud)
(我def之前只是为了调试而把它放在线上,以确保它不是可见性问题),我得到:
Error:(40, 26) value and is not a member of Boolean
if ((l < h.length) and (h(l) > h(i)))
Run Code Online (Sandbox Code Playgroud)
这里发生了什么???
做你想做的事的方式是这样的:
object Pythonians {
implicit class Bool(val b: Boolean) extends AnyVal {
def and(p: => Boolean) = b && p
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以做以下事情:
import Pythonians._
3 < 4 and "foo" == "bar"
Run Code Online (Sandbox Code Playgroud)
但是,帮自己一个忙,而且......不要.如果你"非常喜欢python",为什么不在python中编写代码呢?如果你花时间去学习scala,不妨试试看它自己的语法和习语......谁知道,也许你会比你喜欢python更喜欢它?而其他需要阅读您编写的代码的人将不必理解整个新语言.