That was my hunch. Thanks for clarifying. On Wednesday, December 26, 2012 6:48:18 PM UTC-5, Matt Jones wrote: > > > > On Tuesday, 25 December 2012 20:13:16 UTC-5, John Merlino wrote: >> >> ok, it didn't look like nested methods. But I made to believe that >> this: >> >> sum<=square*deviation|a >> >> is exactly the same as this: >> >> sum<=(square*(deviation|(a))) >> >> So if this is true, then still a question remains. >> > > That's not how it parses, thanks to operator precedence - the same reason > that 2+5*10+3 parses as 2.+((5.*(10)).+(3)) and not 2.+(5.*(10.+(3))). > > You can use a tool like Ripper ( > http://www.rubyinside.com/using-ripper-to-see-how-ruby-is-parsing-your-code-5270.html) > > to see exactly how something is being parsed. Trying your expression yields: > > [:program, > [[:binary, > [:vcall, [:@ident, "sum", [1, 0]]], > :<=, > [:binary, > [:binary, > [:vcall, [:@ident, "square", [1, 5]]], > :*, > [:vcall, [:@ident, "deviation", [1, 12]]]], > :|, > [:vcall, [:@ident, "a", [1, 22]]]]]]] > > Or, distilled back to a fully-parenthized code version: > > sum <= ((square*deviation) | a) > > With the method calls written out explicitly: > > sum.<=((square.*(deviation)).|(a)) > > Essentially, this creates a function that calculates the squared deviation > from the mean (square*deviation), applies it to the list a, and then sums > the resulting values. > > This sort of confusion is why most people recommend avoiding operator > overloading in most cases - there are a bunch of precedence rules built > into the language, and you're essentially stuck with them. > > --Matt Jones >
-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@googlegroups.com. To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/Td1UvO4YivgJ. For more options, visit https://groups.google.com/groups/opt_out.