On Thursday 30 May 2002, Jeff Gray wrote:
> We all know that one can either define a method that has a name of the form
> 'method=' (or use attr_accessor/attr_writer), and when Ruby sees
>
>   obj.method = value
>
>  the equivalent of
>
>   obj.method=(value)
>
> I'm finding that the parser never expects or allows more than one argument
> to the 'method=' style of method naming.  For example, you could define a
> method interface of:
>
>   def method=(arg, &block)
>
> but the parser doesn't want to let you pass in a block to this call.  Both
> of the following generate parse errors:
>
>   obj.method = 12 { <some_code_here> }
>   obj.method=(12) { <some_code_here> }
>
> (Simply removing the '=' from the method name allows the second case to
> work.)  I couldn't find anything in the pickaxe book or in ruby-talk
> archives about this restriction.  I'm on Ruby version 1.6.5 -- has this
> behavior changed in later versions, or is it a permanent trait of Ruby
> syntax?
>
> Thanks,
>
>   - jeff

Also consider the test case below, where a method with = in its name always returns the value passed to it. This is really frustrating, as I want to use = in method names as syntactic sugar but can't because the methods don't behave like they're supposed to.
Is this a bug or a "feature"?

This script:

class TestClass
  def test=(number)
    # 42 is the answer to life the universe and everything.
    42
  end
  def test(number)
    # 42 is the answer to life the universe and everything.
    42
  end
end

test = TestClass.new

puts 'With the = in the method name:'
puts test.test=7
puts test.test=("Doesn't work with parentheses either.")
puts test.test=[1,2,3,"Arrays are cool!"]

puts 'And without:'
puts test.test(7)
puts test.test("Doesn't work with parentheses either.")
puts test.test([1,2,3,"Arrays are cool!"])

Produces output:

With the = in the method name:
7
Doesn't work with parentheses either.
1
2
3
Arrays are cool!
And without:
42
42
42