iはデータのパラメータ化タイプを保持するデータ構造を持っているとしましょう:クラス引数プレースホルダ(または入力変数)を使用して、Scalaの
case class Terminal[A](value: A, name: String ="")
私は一定のマテリアライズドそれを渡すと、私は簡単にTerminal[Double]
を作成することができます:
val terminal = Terminal(2.0)
はしかし、私はまた、私は別の文脈で、端末を複数回評価することができるように(マテリアライズではない)input
を受信できるようにしたいです。このプログラムのユーザーが素敵ではありませんvar input_x = None
のようなもの、とinput
を初期化して、その状態を変更する必要がありますしかし、私はこれで、すなわち
class Terminal[A](value: => A, name: String ="") {
def getValue = this.value
}
var x = 1.0
val terminal = new Terminal(x)
terminal.getValue // 1.0
x = 100.0
terminal.getValue // 100.0
、名前でvalue
を呼び出すことによって、シンプルなソリューションを実現することができますターンは私にvalue
をOption[A]
にする必要がありますこの状況に対処するための最良の方法ですか?私が使用できるデザインパターンやスケーラ機能はありませんか?
これらのコンテキスト依存入力を表すクラスInput
を作成することもできますが、多くの変更が必要になります。
問題に特定の解決策を適用しようとして問題が発生しているようです。問題は、ソリューションを実装するための助けを求めることです。これは間違いがほとんどありませんが、解決しようとしている実際の問題は決して記述しません。私はあなたが一歩踏み出し、この「ターミナル」クラスが必要な理由(あなたが思う)と、それを実生活でどのように使うのか想像してみることをお勧めします。 – Dima