[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:929

From: SASADA Koichi <ko1 atdot.net>
Date: Sun, 19 Feb 2006 03:08:37 +0900
Subject: [yarv-dev:929] Re: open> uninitialized class variable

 ささだです。

sheepman wrote:
> 次のようなコードで ruby-1.9 と振る舞いが違います。
> 
> $ cat t.rb
> class A
>   @@d ||= 1
>   p @@d
> end
> 
> $ ruby-1.9 -v t.rb
> ruby 1.9.0 (2006-02-15) [i686-linux]
> 1
> 
> $ ./miniruby -v t.rb
> ruby 1.9.0 (2006-02-14) [i686-linux]
> YARVCore 0.3.3 (rev: 438) [opts: ]
> t.rb:2:in `<class:A>': uninitialized class variable @@d in A (NameError)
>         from t.rb:1:in `<main>'
> 

 うはー。

 x ||= y

は、

  unless x
    x = y
  end

だと思ってたんですが、

  unless defined?(x)
    x = y
  end

という意味なんでしょうか(知らなかった人)。

リファレンスマニュアルには

> foo += 12       # foo = foo + 12
> a ||= 1         # a が偽か未定義ならば1を代入。初期化時のイディオムの一種。

とありますねぇ。うう、defined? だったのか。

-- 
// SASADA Koichi at atdot dot net


-- 
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       925 2006-02-18 09:15 [sheepman sheepman.sa] open> uninitialized class variable      
->     929 2006-02-19 03:08 ┣[ko1 atdot.net       ]                                       
       930 2006-02-19 03:12 ┃┗[ko1 atdot.net       ]                                     
       931 2006-02-19 03:29 ┃ ┗[ko1 atdot.net       ]                                   
       936 2006-02-19 18:34 ┃  ┣[matz ruby-lang.org  ]                                 
       940 2006-02-20 18:24 ┃  ┗[ko1 atdot.net       ] fixed> Re: open> uninitialized class variable
       932 2006-02-19 03:52 ┗[ko1 atdot.net       ]                                       
       933 2006-02-20 09:41  ┣[matz ruby-lang.org  ]                                     
       935 2006-02-19 18:33  ┗[matz ruby-lang.org  ]