1

これらの関数はすべて同じことを行います。

def h0(f: Int => Int)(g: Int => Int)(x: Int) = f(g(x))
def h1(f: Int => Int, g: Int => Int)(x: Int) = f(g(x))
def h2(f: Int => Int)(g: Int => Int, x: Int) = f(g(x))
def h3(f: Int => Int, g: Int => Int, x: Int) = f(g(x))

今、私はポリレンマにいます:どのコンテキストで引数を「分割」する必要がありますか?

4

1 に答える 1

3

分割引数は型推論に役立ちます (コンパイラは一度に 1 つずつ左から右に処理するため、右側で混乱することなく左側の型を修正できますが、その場合の欠点は、完全に推測する前にジェネリック型を参照すると、次のパラメーター ブロックに到達するまでに部分的な進行状況で立ち往生します)、および括弧の代わりに中括弧を許可するためです。したがって、次のような構文が必要な場合

h0{ i =>
  math.round(math.pow(0.9123751,-i)).toInt
}{ j =>
  (10*math.sin(j)).toInt
}(2)

次に、のように物事を分割する必要がありますh0。それ以外の場合は、最大限の明確さのために意味のあることは何でもできます。特に、h2上記はグループgxされており、明確な理由がないため悪いです。コンテキストによっては、他のどれでも問題ない可能性があります。

于 2013-04-01T21:38:11.910 に答える