最適化 #1170
未完了
あひる 家鴨 さんがほぼ7年前に追加.
ほぼ7年前に更新.
説明
Gtk::FormDSL::Select
の持つ option
の引数が value, label
の順序になっている。
formの持つ他のウィジェットの引数は label, value
になっているため、統一したい
考えている実装方法としては以下の通り
option(value, label = nil)
から option(label = nil, value)
に変更する
- 互換性の維持のために第一引数に symbol が与えられている場合は、何かしらの警告を出しつつメソッド内で順序を入れ替えて、変更前のものが動くようにする
valueに与えられるのは Symbol とは限らないということを失念していました。
他の判別方法を模索します。
value に String が入ってくると、それが value なのか label なのかの判断がつかない問題に直面した。
なんか他にうまく統一できる方法はないだろうか。
統一することには賛成ですが、たしかに互換性は必須ですから、難しいですね。 #1170-2 のとおり、値のclassを見てスワップすることはできないため、ルール自体に互換性のある変更をすることを思いつきました。二つ提案しますが、個人的にはどちらかといえばキーワード引数を推します。他に良い方法があるかな。
キーワード引数を利用¶
全てのウィジェットにキーワード引数としてlabelを追加します。valueでなくlabelをキーワード引数にするのは、labelが必須ではないからです。
キーワード引数を使えば、labelを受け取ることができない一部のウィジェットで引数のインデックスがずれていて気持ち悪いという問題を回避できます。実装が複雑になってしまいますが、引数の数を見て以前のような記述でも動くようにはできる気がします。
select :key, label: "選んでください" do
option :left, label: "左"
option :right, label: "右"
end
# inputなど、他のウィジェットもすべてoptionalな名前付き引数に対応させる
input :free_text, label: "あ"
新しいメソッドを定義する¶
optionメソッドの引数の順序を入れ替えた新しいメソッドを定義し、今後はそちらを利用することにします。
シンプルな実装で引数の順序を入れ替えられますが、selectとoptionというのはHTMLをオマージュしてこのような名前になっているため、option以外の良い名前がないという問題があります。
提案ありがとうございます。
二つの提案を比べてみるとキーワード引数の方がよさそうです。
キーワード引数を利用
しっくりきました。
インデックスずれについては盲点でしたが、この実装によって回避できるのはいいですね。
大まかな実装の手段としてはこちらで一旦書いてみようと思います。
適当にどれかのウィジェットで仮実装して他に考慮すべき点があるか確認をして、なければウィジェット全体に適用して見たいと思います。
新しいメソッドを定義する
optionはそれ以上にいい名前がなさそう、かつ今の名前がフィットしているので、できるなら今の名前を引き継ぎたいです。
他の形式にエクスポート: Atom
PDF