On Sat, Jun 4, 2011 at 6:50 AM, Ilias Lazaridis <ilias / lazaridis.com> wrote:

> 1.9
>
> names = ["Jane", "Michele", "Isabella"]
>
> # current behaviour
> names.each do |name|
>  print name
> end
>
> #Question: How can I alter the behaviour of "each" in the following
> way:
> names.each do
>  print item         # "item" is used by default
> end
>
> Is this possible, without going to C-level?
>

Since everyone is still speaking to Ilias far too often, I'll try to use
this as a teaching experiment.  I'll post the code that does exactly what he
asked for.  Exactly.  If he follows standard form, you should see complaints
about the non-code content of this message and the solution itself.

The solution:

#######################################################
### NEVER USE THIS CODE, unless your name is Ilias! ###
#######################################################

class Item
  def initialize(item)
    @item = item
  end

  attr_reader :item
end

class Array
  alias_method :sane_each, :each
  def each(&iterator)
    if iterator.arity.zero?
      sane_each do |item|
        Item.new(item).instance_eval(&iterator)
      end
    else
      sane_each(&iterator)
    end
  end
end

names = %w[Jane Michele Isabella]

names.each do |name|
  puts name
end

names.each do
  puts item
end

__END__

The most important thing to learn about Ilias is that he's not a programmer
and has no desire to become one.  Ever.  Look at his code from this example.
 Ilias never posts project code.  He doesn't do anything.  He just attacks
esoteric corners of syntax to incite debate.

His requests almost always involve terrible ideas that obviously violate
some good programming practice.  If he doesn't know this, he has never
learned it from all the years he has spent in many programming language
groups.  If he does know it, he's using his knowledge optimally to push the
most buttons.  Either way, you know what you need to know.

Note how he's never learned the tiniest bit of Ruby during any of his stays
with us.  He doesn't indent like we do, he wouldn't think to call puts(),
etc.  Ilias literally cannot assimilate, beyond minor efforts to gain
sympathizers.

See his other messages for examples of how he usually selects the most
abrasive language.  Words like "BARRIER" are used for a desired effect and
he loves it when we tell him not to talk to us that way.

You all know that I try very hard to be polite and helpful.  Ilias is the
exception.  I totally believe he is diagnosable.  Anytime we push "Reply,"
we feed his needs.  It's hard, but you really have to ignore him.  It's the
only option he leaves to us.

You won't see me respond when he complains about this message.  He'll say
stupid things I'm dying to correct for all the watching eyes.  That's what
Ilias does.  Though it hurts me, I won't push "Reply."  Just writing a
message like this about a person kill's me.  But these are the only ways to
minimize his reach.  We are not playing this game against a rational
opponent.

Choose another soul to save on Ruby Talk and let this one go.

http://www.nationmaster.com/encyclopedia/Ilias-Lazaridis

James Edward Gray II