gpt4 book ai didi

scala - 这个三元运算符的实现是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 12:38:49 24 4
gpt4 key购买 nike

我最近经常使用 scala 三元运算符的这种实现,尤其是在切换启用/禁用图像时,但是,我通常可以理解我找到的代码片段,这让我感到困惑。我还想稍微修改一下以更好地满足我的需要。我喜欢 operator-ish 语法而不是冗长的 if else block 等。

implicit def BooleanBool(b: Boolean): Bool = Bool(b)

case class Bool(b: Boolean) {
def ?[X](t: => X) = new {
def |(f: => X) = if (b) t else f
}
}

所以我理解隐式创建一个 Bool 对象,其中 ?作为一个功能。该函数必须返回 X 类型的值。其余的我很难理解。

这是我的问题:

  1. 嵌套函数是如何工作的?的 |功能。
  2. 代码实际解析的顺序是什么?
  3. 我如何更改它以便可以选择没有 else 子句?例如。是天蓝()?去外面()
  4. 嵌套三元运算符是否有缺点,例如:

    isTheSkyBlue() ? goOutside() | {
    isTheInternetOn() ? playVideoGame() | read()
    }
  5. 能否将嵌套更改为类似于 case 语句。即使用 => 运算符或类似的。例如。

    isTheSkyBlue() ? goOutside() | =>
    isTheInternetOn() ? playVideoGame() | read()

    或者甚至一起摆脱它

    isTheSkyBlue() ? goOutside() |
    isTheInternetOn() ? playVideoGame() | read()

最佳答案

回答1和2,嵌套函数很简单,字符? |只是方法名。我将 ? 重命名为 question 并将 | 重命名为 or 并添加到对 Bool 。这是脱糖后的样子:

  case class Bool(b: Boolean) {
def question[X](t: => X) = new {
def or(f: => X) = if (b) t else f
}
}

Bool(isTheSkyBlue()).question(goOutside()).or(
Bool(isTheInternetOn()).question(playVideoGame()).or(read())
)

3 有点难,因为 if 需要一个 else 否则它会返回什么?如果你只是在做副作用,那么你可以这样做:

  implicit def OneWayBooleanBool(b: Boolean): OneWayBool = OneWayBool(b)

case class OneWayBool(b: Boolean) {
def ??[X](t: => X) = if (b) t
}

isTheSkyBlue() ?? goOutside()

对于问题 4,除了代码复杂之外,嵌套没有真正的问题。

对于问题 5,你不能真正做到这一点,因为 scala 将如何解决问题,除非其他人知道如何做到这一点。

关于scala - 这个三元运算符的实现是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com