相关疑难解决方法(0)

Scala函数式编程体操

我试图在尽可能少的代码和尽可能功能的情况下执行以下操作:

def restrict(floor : Option[Double], cap : Option[Double], amt : Double) : Double
Run Code Online (Sandbox Code Playgroud)

显然以下工作:

= (floor -> cap) match {
    case (None, None)       => amt
    case (Some(f), None)    => f max amt 
    case (None, Some(c))     => c min amt
    case (Some(f), Some(c)) => (f max amt) min c
  }
Run Code Online (Sandbox Code Playgroud)

我真的希望有更优雅的东西,并且会接受使用Scalaz库!您可以假设以下情况属实:

floor.forall( f => cap.forall( _ > f))
Run Code Online (Sandbox Code Playgroud)

如果有人有兴趣,这里有一些测试代码:

object Comparisons {
  sealed trait Cf {
    def restrict(floor: Option[Double], cap: Option[Double], amt: Double): Double
  }

  def …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala scalaz

10
推荐指数
4
解决办法
2167
查看次数

Scala构造函数,默认arg引用另一个arg

我想使第二个构造函数参数可选,并在这种情况下使用第一个参数的值.有什么方法可以做到吗?此代码无法编译,因为它找不到realUser:

class CurrentUser(val realUser:String, val masqueradeUser:String = realUser)
Run Code Online (Sandbox Code Playgroud)

我确信我可以通过编写自己的构造函数解决它,但我想知道是否有更简洁的方法.实际上现在我已经尝试编写自己的构造函数了,它并没有那么糟糕:

class CurrentUser(val realUser:String, val masqueradeUser:String) {
    def this(realUser:String) = this(realUser, realUser)
}
Run Code Online (Sandbox Code Playgroud)

如果有人可以提出更短的东西,那么我会发布自己的答案.

constructor scala

8
推荐指数
3
解决办法
264
查看次数