私はクラスのいくつかのオプションを設定する方法を考え出しています。 'options'はハッシュです。私は他の場所でこれは間違っていますが、どうして良いですか?
3を使用するために、いくつかのインスタンス変数を設定する)と@current_optionsように処理オプションで別のハッシュを設定する)私が欲しいか
2を必要としないオプションをフィルタリング)
1にしたいです。私は、コマンドラインからラインで、この行を行うと
{:timestamps_offset=>0, :destructive=>false, :minimal_author=>false}
が、それは私が望むように動作します:私は推測している
def initialize_options(options)
@whitelisted_options, @current_options = [:timestamps_offset, :destructive, :minimal_author], {}
n_options = options.select { |k,v| @whitelisted_options.include?(k) }
@current_options[:timestamps_offset] = @timestamp_offset = n_options.fetch(:timestamps_offset, 0)*(60*60*24)
@current_options[:destructive] = @destructive = n_options.fetch(:destructive, false)
@current_options[:minimal_author] = @minimal_author = n_options.fetch(:minimal_author, false)
end
これは少しくらい、関係なく、私は私に渡すものを手に入れるんですそれは私のクラスにはありません。それでは何が起こっているのですか?これをどうやってきれいにしますか?
EDIT:これは私が使用しているクラスから実際には機能しませんが、実際には現実は何かが起こっています。私は今は気づいていません。
attr_reader:current_optionsは、これがクラス上でどのように設定されているかを示しています。多分、いくつかのリビジョンが必要です。
EDIT2:実は私は...「オプション」考えていませんでした何かをであることが判明したとして、YAMLファイルから解析しています:メソッドの2行目は@whitelisted_options
EDIT3から選択するようになっています私はシンボルをフェッチしていました。その方法を変更すると、メソッドがシンボルを探していて、見つからなかった場合には、違いが生じます。 "destructive" vs:destructiveなので、常にデフォルトにデフォルト設定されています。つまり、オプションをインポートするときにハッシュキーを象徴する必要がありました。
私はそれを変更しましたが、元々反映しませんでした。 n_optionsは無効なオプションを削除したオプションです。 – blueblank
これは近いですが、実際には設定変数を返すわけではありません。つまり、デフォルトのオプションが常に返されます(または私はまだそれが見えません)。しかし、それは近いですし、私は少し違うことにもう一つの手がかりを与えます。 – blueblank
@blueblank私のコードは、@ @ current_options'を設定した後、 '@whitelisted_options'を返していました。修正されました: – andrewdotnich