4

結果を返すアサーションの組み込みサポートはありますか?

これを行うのは非常に非機能的です:

  def addPositive(a: Int, b: Int) = {
    assert(a > 0 && b > 0)
    a + b
  }

私はむしろ次のようなことをしたいと思います:

  def addPositive(a: Int, b: Int) = 
    assert(a > 0 && b > 0)(a + b)

このようにして、アサートの必須の側面を回避できます。(後者はコンパイルされません) 似たようなものはありますか?

4

3 に答える 3

4

独自の実装を展開できます。

def assert[T](cond: =>Boolean)(expr: =>T): T = {
  assert(cond)
  expr
}

オプション タイプを使用して例外を回避することもできますが、それは後で結果に対してパターン マッチを行う必要があることを意味します。

def addPositive(a: Int, b: Int): Option[int] =
  if (a > 0 && b > 0) Some(a + b)
  else None

assertこれは、上記のバリアントと同様の方法でリファクタリングできます。

于 2013-04-12T11:43:41.553 に答える
-5

前提条件の機能がありrequire、これでほとんど目的が達成されます。できるよ

def addPositive(a: Int, b: Int) = 
   require (a > 0 && b > 0, a + b)

scala.Predefの一部があるので、それらは常に含まれています。パラメーター (a+b例では) は名前で渡されるため、条件が true でない場合にのみ実行されます。

requiresは常にアクティブ化されています。非アクティブ化できるようにしたい場合は、次assertのようにして作成することもできます。

assert(a > 0 && b > 0, a + b)
于 2013-04-12T12:24:40.063 に答える