質問

OK、私はスロットが半ダース行列、いくつかのリスト、およびおそらく台所の流しやそこに2を含めて、非常に複雑なオブジェクトを構築するためにS4クラスを使用しようとしています。オブジェクトはを参照し、私はすでに定義した設定オブジェクトを開梱することによって初期化されます。それはsetClass()を持つクラスを定義するための簡単な十分ですが、私は(「初期化」)のsetMethod内のスロットを設定するエレガントな方法を考え出す困難を抱えています。

問題は、私は、その構成オブジェクトの一部に基づくもの半ダース行列の特定の要素を設定する必要があることです。構成オブジェクトの各要素について、Iは行列のいくつかの特定の要素を設定する必要ができます。行列は、初期化関数のスコープ/環境であることに注意してください。私はその後、行列に実際の割り当てを行う初期化関数内でネストされた機能を持っている、またはそれはとにかくアイデアです。これらの機能はもちろん、は見ることができます。の行列が、彼らはできません。の変更のそれら<ため - 元の変数は、現在の環境で定義されていない場合は、オペレータが新しい行列を作成。 Rはそれをすることによって価値の通過、および手段です。これは私が初期化しようとしている.Objectのスロットのためにも当てはまります。私は初期化を行うには、ネストされた関数を使用することはできませんので。

残念ながら、これらのネストされた関数が行列のいくつかを変更する必要があり、その値を返すと、メインの初期化関数で割り当てを行うことは現実的でエレガントではありません。 (しかし、それは。私が返されたリストの中に行列のコピーを詰めた後、メインの初期化関数でそれらを組み合わせた場合、醜いしかし可能であり、余分なコードを大量に必要になります。)

と繰り返し(このスコープの問題を防ぐことになる)ので、本当に再帰呼び出しで移動したい構成オブジェクトの階層的な性質のいずれかの非常に実用的ではありません。

私は考えることができる最後のオプションは、非ローカル変数に適用する割り当てを強制的にENVIRオプションでアサイン()関数を使用することです。しかし、goto文のような不快と思われるそのような環境を、使用して...

だから、ほとんどの海賊のアプローチは何ですか?純粋関数型プログラミングとビルド醜いデータ構造とスティックだけで非効率的に冗長な行列を周りに渡しますか?完全な機能を回避し、反復解決策を見つけることを試みますか?環境と一緒に遊んで深い魔法を使用しますか?

役に立ちましたか?

解決

あなたは<<-を見たことがありますか?それは少し楽親環境に割り当てることになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top