の線形化は、次のように私はケースクラスStepper
を書きたいと仮定:ケースクラスと特性
case class Stepper(step: Int) {def apply(x: Int) = x + step}
それは素敵なtoString
実装が付属しています:
scala> Stepper(42).toString
res0: String = Stepper(42)
しかし、それは本当に機能ではありません:
scala> Some(2) map Stepper(2)
<console>:10: error: type mismatch;
found : Stepper
required: Int => ?
Some(2) map Stepper(2)
回避策は、Function
トレイト...
case class Stepper(step: Int) extends (Int => Int) {def apply(x: Int) = x + step}
しかし、その後、私はもう自由な素敵なのtoStringの実装を持っていることはできませんが:
scala> Stepper(42).toString
res2: java.lang.String = <function1>
その後、質問は:私は、これら2つの長所を持つことができます?無料とを実装したtoString
の実装は、Function
という優れた実装方法がありますか?言い換えれば、最後にcase class
シンタックスシュガーが適用されるように線形化を適用する方法はありますか?
はい、実際には線形化ではありませんが、他の適切な名前は見つかりませんでした。そして、それは私が期待していた種類のトリックでした、ありがとうございました。 – Nicolas
@Nicolas私はあなたをとてもよく理解しています。何が起きているのかわからないときには、問題を正確に記述することが困難なことがよくあります。 –
@Vlad:私はScala APIドキュメントには表示されない 'scala.runtime'からの何かの使用を避けてきました。私はこれが賢明な回避策であることに同意しますが、平凡な古いScala言語機能を使用する同様の優れたソリューションがあることを考えると、実際には価値があると思いますか? –