解释一个scala类和对象?
发布时间:2020-12-16 18:20:09 所属栏目:安全 来源:网络整理
导读:观看关于Martin Odersky的 scala课程的4.2课程我不理解下面的课程,或者它的用法: abstract class Boolean { def ifThenElse[T](t: = T,e: = T): T def (x: = Boolean): Boolean = ifThenElse(x,False) def || (x: = Boolean): Boolean = ifThenElse(True,x)
观看关于Martin Odersky的
scala课程的4.2课程我不理解下面的课程,或者它的用法:
abstract class Boolean { def ifThenElse[T](t: => T,e: => T): T def && (x: => Boolean): Boolean = ifThenElse(x,False) def || (x: => Boolean): Boolean = ifThenElse(True,x) def unary_! : Boolean = ifThenElse(False,True) def == (x: Boolean): Boolean = ifThenElse(x,x.unary_!) def != (x: Boolean): Boolean = ifThenElse(x.unary_!,x) object False extends Boolean { def ifThenElse[T](t: => T,e: => T) = e } object True extends Boolean { def ifThenElse[T](t: => T,e: => T) = e } } 可以提供样品实施/解释,以便我可以更好地提供正在发生的和/或其使用的内容吗? 解决方法
所有必需的实现都包含在您的示例中.
Boolean是一个抽象的超类,有两个具体的实现:True和False 超类定义了布尔值的常见操作,将不同的行为委托给子类之间唯一不同的特定操作:方法ifThenElse 子类被定义为对象,因此它们只有一个实例. 为了理解它们是如何工作的,让我们举一些例子 /* we start with the basic values and call an if/else control * implementation that prints "yes"/"no" depending on the target */ scala> True.ifThenElse(println("yes"),println("no")) yes scala> False.ifThenElse(println("yes"),println("no")) no /* we can negate */ scala> (! True).ifThenElse(println("yes"),println("no")) no scala> (! False).ifThenElse(println("yes"),println("no")) yes /* and do some algebra */ scala> (True && False).ifThenElse(println("yes"),println("no")) no scala> (True || False).ifThenElse(println("yes"),println("no")) yes /* or some equality tests */ scala> (True && True == True).ifThenElse(println("yes"),println("no")) yes scala> (False || True != True).ifThenElse(println("yes"),println("no")) no 这只是一种使用call-by-name来实现布尔运算的教育方法.正如您所看到的,每个调用只打印一个值,显示参数是“按需”而不是在调用站点进行评估的事实. 当然,这种符号使用起来相当麻烦,但它意味着说明性而不实用,目标并非如此. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |