From: Magnus Holm Date: 2011-06-22T05:38:10+09:00 Subject: [ruby-core:37270] Re: [Ruby 1.9 - Bug #4914][Open] Array#index fails when used in if statement assignment Ruby parses your code like this: if i = (a.index(k.to_sym) && k.to_s =~ /b/) You can fix this by using "and" or explicit parenthesis: if i = a.index(k.to_sym) and k.to_s =~ /b/ if (i = a.index(k.to_sym)) && k.to_s =~ /b/ // Magnus Holm On Tue, Jun 21, 2011 at 22:28, Benjamin ter Kuile wrote: > > Issue #4914 has been reported by Benjamin ter Kuile. > > ---------------------------------------- > Bug #4914: Array#index fails when used in if statement assignment > http://redmine.ruby-lang.org/issues/4914 > > Author: Benjamin ter Kuile > Status: Open > Priority: Normal > Assignee: > Category: > Target version: > ruby -v: 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux] > > > cat /etc/issue: Ubuntu 11.04 > rvm -v: rvm 1.6.2 > rvm 1.9.2, ruby -v: ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux] > Also tested with: rvm 1.9.2-head, ruby -v: ruby 1.9.2p274 (2011-06-06 revision 31932) [x86_64-linux] > > Test code: > > a = [:a, :b, :c] > for k in 'a'..'c' > ��if i = a.index(k.to_sym) && k.to_s =~ /b/ > �� ��puts i > ��end > end > for k in 'a'..'c' > ��i = a.index(k.to_sym) > ��if i && k.to_s =~ /b/ > �� ��puts i > ��end > end > > output: > 0 > 1 > > expected output: > 1 > 1 > > > -- > http://redmine.ruby-lang.org > >