相关疑难解决方法(0)

为什么不提供运营商?:在斯卡拉

? :Java中有一个运算符,可用于根据布尔表达式选择值.例如,表达式3 > 2 ? "true" : false将返回一个字符串"true".我知道我们可以使用if表达式来做到这一点,但我更喜欢这种风格,因为它简洁而优雅.

java scala operator-keyword

15
推荐指数
3
解决办法
8729
查看次数

Option包装值是一个好的模式吗?

我最近写了以下Scala:

val f: File = ... // pretend this file came from somewhere
val foo = toFoo(io.Source.fromFile(f).mkString)
Run Code Online (Sandbox Code Playgroud)

我真的不喜欢这种流动的方式.要了解发生了什么,你必须从f中间开始,向左fromFile阅读,向右mkString阅读,再向左阅读toFoo.啊.

特别是在习惯了序列的功能转换之后,这很难理解.我的下一次尝试看起来像这样:

val foo = Some(f)
  .map(io.Source.fromFile)
  .map(_.mkString)
  .map(toFoo)
  .get
Run Code Online (Sandbox Code Playgroud)

我喜欢这个更好的流程.你可以看到会发生什么这是一个很好的使用Option课程?还是我在滥用它?有没有更好的模式可以用来实现相同的流程?

scala

11
推荐指数
2
解决办法
2253
查看次数

如何在Scala中定义一个保留前导令牌的三元运算符?

我正在编写一个生成Scala输出的代码生成器.

我需要模仿一个三元运算符,使得令牌导致'?' 保持不变.

例如,将表达式转换c ? p : qc something.简单if(c) p else q不符合我的标准,因为它需要放在if(前面c.

我的第一次尝试(仍然使用上面的c/p/q)是

c match { case(true) => p; case _ => q }

我找到的另一个选择是:

class ternary(val g: Boolean => Any) { def |: (b:Boolean) = g(b) }

implicit def autoTernary (g: Boolean => Any): ternary = new ternary(g)

这让我写:

c |: { b: Boolean => if(b) p else q }

我喜欢第二个选项的整体外观,但有没有办法让它更简洁?

谢谢

language-features scala scala-2.8

9
推荐指数
3
解决办法
5885
查看次数

"?:"运算符是scala

在Java中,我可以写:

Double x = (x1 > x2)? x1:x2
Run Code Online (Sandbox Code Playgroud)

但这似乎在Scala中不起作用,以下内容有错误:

var x = (x1 > x2)? x1:x2
Run Code Online (Sandbox Code Playgroud)

我不想在Scala中为此编写一段代码:

var x = x2

if (x1 > x2 ) {
    x = x1
}
Run Code Online (Sandbox Code Playgroud)

如果在Scala中有更清洁的方式进行此类操作?谢谢!

java scala operators

0
推荐指数
1
解决办法
126
查看次数