From: Chris Kottom Date: 2011-03-19T20:39:51+09:00 Subject: Re: Missing space leads to different result --000e0cd530441fb3fd049ed45a48 Content-Type: text/plain; charset=UTF-8 Removing the space causes the minus to be interpreted as a unary negative operator rather than the binary minus that you get with the space. The unary operator has a relatively higher precedence than the binary minus and more importantly than the dot operator used for invoking #count on your array, so it changes the expression evaluation completely -- first, evaluating the unary negative operator on 1, and then passing the result as an argument to #count. Because Array#count can take an argument that says, "count how many of this thing I have in my array", you get 0 as your output because your array has no -1 elements. See how the result changes below when I begin adding -1's to my array. ruby-1.9.2-p0 :001 > elems = ["a", "b", "c"] => ["a", "b", "c"] ruby-1.9.2-p0 :002 > elems.count - 1 => 2 ruby-1.9.2-p0 :003 > elems.count -1 => 0 ruby-1.9.2-p0 :004 > elems << -1 => ["a", "b", "c", -1] ruby-1.9.2-p0 :005 > elems.count -1 => 1 ruby-1.9.2-p0 :006 > elems << -1 => ["a", "b", "c", -1, -1] ruby-1.9.2-p0 :007 > elems.count -1 => 2 On Sat, Mar 19, 2011 at 12:13 PM, Lars Olsson wrote: > Hi, > > Yesterday I introduced a bug in one of my scripts after accidentally > deleting av space. It took me quite I while to find where the bug was, > but I still can't understand *why* the missing space leads to a > different result. Anyone out there that can explain it to me? > > lasso@lasso-laptop:~$ ruby -v > ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux] > > lasso@lasso-laptop:~$ irb > irb(main):001:0> elems = ['foo', 'bar', 'baz'] > => ["foo", "bar", "baz"] > irb(main):002:0> puts elems.count -1 > 0 > => nil > irb(main):003:0> puts elems.count - 1 > 2 > => nil > > How does the missing space between the minus sign and the number 1 > change the expression? > > Any answers appreciated > > /lasso > > --000e0cd530441fb3fd049ed45a48--