加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

解释一个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来实现布尔运算的教育方法.正如您所看到的,每个调用只打印一个值,显示参数是“按需”而不是在调用站点进行评估的事实.

当然,这种符号使用起来相当麻烦,但它意味着说明性而不实用,目标并非如此.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读