[#39863] forループの速度 — Masahiro Sato <msato@...>

15 messages 2004/07/20

[#39868] イテレータとfor文 — OOTANI TAKASHI <otn@...5.so-net.ne.jp>

大谷と申します。

31 messages 2004/07/20
[#39886] Re: イテレータとfor文 — Tietew <tietew-ml-ruby-list@...> 2004/07/21

[ruby-list:39812] Re: keyword-argument-like argument passing via Hash

From: SASADA Koichi <ko1@...>
Date: 2004-07-02 11:54:53 UTC
List: ruby-list #39812
  NISHIMATSU Takeshi <t-nissie@imr.tohoku.ac.jp> wrote :
    [ [ruby-list:39811] keyword-argument-like argument passing via Hash ]
    at Fri, 2 Jul 2004 20:20:27 +0900

 ささだです.

> た. しかし, Hashのキーのシンボルなどのtypo(綴り間違い)
> を検出して例外を揚げるうまい方法が思い浮かびません. 実際,

 Hash のキーをチェックするなら,ハッシュのキーに変なもの
を指定されてたら例外を発生させればいいのではないでしょうか.
インスタンス変数のチェックは,簡単にはいかない気がします.

>     when Hash
>       __create do
>         @attrib1 = arg[:attrib1] || arg['attrib1'] || @attrib1
>         @attrib2 = arg[:attrib2] || arg['attrib2'] || @attrib2
>         @attrib3 = arg[:attrib3] || arg['attrib3'] || @attrib3
>         instance_eval(&block) unless block.nil?
>       end

は,

when Hash
  __create do
    keys = ['attrib1', 'attrib2', 'attrib3']
    arg.each{|k,v|
      k = k.to_s
      raise 'こんなキーしりません' unless keys.include?(k)
      instance_variable_set('@'+k, v)
    }
  end
  ...

とか?

 インスタンス変数の typo をチェックしたいのなら,セットする
前とあとで Object#instance_variables でチェックするってのは
手かもしれませんが,新しく追加されるインスタンス変数しかチェック
できないのであんまり使えない気がします.直接 instance_eval を
実行してしまうのは,ほかにも変なことやっちゃうかもしれないので,
できれば避けた方がいいんじゃないかと思います.

-- 
// SASADA Koichi at atdot dot net
//


In This Thread