| 著作一覧 |
状態変数を利用したプログラムを実装するときに、あまり何も考えずに、Numeric定数を使ってしまって失敗した。
STATE_A = 1 STATE_B = 2 STATE_UNKNOWN = 99 ... case @current_state when STATE_A ...
あとからステートパターンを実装することを考えたら、そこはSymbolを使うべきところだった。
STATE_A = :state_a # 不要だが、ステート一覧を示すための宣言と考える
STATE_B = :state_b
...
if self.respond_to?(@current_state)
@current_state = self.__send__(@current_state)
else
raise "unknown state #{@current_state}"
end
...
def state_a
if foobar
STATE_B
else
STATE_A
end
end
追記: よく考えたらstateを算術演算しているわけではないから中身をSymbolにしたら解消した。型指定がなくてよかった。
ジェズイットを見習え |