[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:001283] Re: && and || of NArray



堀之内です。

田中さんはこのメールに参加されてません
(ので私が回答します)。

> NArrayで && と || の挙動がおかしいと思われるので報告します。

実はおかしくないんです。

> %cat test.rb
> require "narray"
> x = NArray.float(3).indgen
> y = NArray.float(3).indgen
> x = x>=2
> y = y>=1
> p x
> p y
> p x&&y
> p x||y

> 期待するのは
> && -> [0,0,1]
> || -> [0,1,1]
> だと思います。

&&, || は Ruby の定義のまんまです。よって、
x && y は、x が false/nil であれば x を, なければ y を返します。また、
x || y は、x が false/nil であれば y を, なければ x を返します。
これで、x や y が true または false であるときは、&&, || として
期待される働きをすることはわかりますね。これは再定義しないほうが
いい。

西澤君のやりたいことは、&&, || でなく &, | でやります。
またはメソッド and, or を使う。

irb(main):009:0> p x&y
NArray.byte(3): 
[ 0, 0, 1 ]
irb(main):007:0> p x.and(y)
NArray.byte(3): 
[ 0, 0, 1 ]

堀之内 武                    horinout@xxxxxx
京都大学宙空電波科学研究センター        phone:0774-38-3812  
611-0011 宇治市五ヶ庄                     fax:0774-31-8463