From: Li Chen on
Hi all,

Maybe I miss something. But I am confused about method call within a
class. What is the format for that? I just copy some code segments from
the forum as follows:

module Enumerable
def each_with_index
i = 0
each do |elem|
yield elem, i
i += 1
end
end
end

class Array
def each_with_index
size.times do |i|
yield self[i], i
end
end
end

So
1) which one is the reciever for "each"?
2) which one is the reciever for "size"?

Do they default to self?

Thanks,

Li
--
Posted via http://www.ruby-forum.com/.

From: Andrea Dallera on
Hei,

"each"'s receiver will be an instance of a class that includes the
module Enumerable and "size"'s receiver will be an instance of the class
Array. Example:

array = Array.new
p array.size # => 0

class MyEnumerable
include Enumerable

end

foo = MyEnumerable.new
foo.each_with_index # doesn't raise, the method is defined

HTH

--
Andrea Dallera
http://github.com/bolthar/freightrain
http://usingimho.wordpress.com


On Mon, 2010-04-12 at 02:48 +0900, Li Chen wrote:
> Hi all,
>
> Maybe I miss something. But I am confused about method call within a
> class. What is the format for that? I just copy some code segments from
> the forum as follows:
>
> module Enumerable
> def each_with_index
> i = 0
> each do |elem|
> yield elem, i
> i += 1
> end
> end
> end
>
> class Array
> def each_with_index
> size.times do |i|
> yield self[i], i
> end
> end
> end
>
> So
> 1) which one is the reciever for "each"?
> 2) which one is the reciever for "size"?
>
> Do they default to self?
>
> Thanks,
>
> Li


From: Li Chen on
Andrea Dallera wrote:
> Hei,
>
> "each"'s receiver will be an instance of a class that includes the
> module Enumerable and "size"'s receiver will be an instance of the class
> Array. Example:
>
> array = Array.new
> p array.size # => 0
>
> class MyEnumerable
> include Enumerable
>
> end
>
> foo = MyEnumerable.new
> foo.each_with_index # doesn't raise, the method is defined
>

Hi Andrea,

Thank you very much. So the receiver can be omitted when the method is
called within a class, right?

Li
--
Posted via http://www.ruby-forum.com/.

From: Andrea Dallera on
Hei Li,

yes, the default deceiver is 'self' so, if omitted, the receiver for
any message will be the istance itself.

--
Andrea Dallera
http://github.com/bolthar/freightrain
http://usingimho.wordpress.com


On Mon, 2010-04-12 at 04:15 +0900, Li Chen wrote:
> Andrea Dallera wrote:
> > Hei,
> >
> > "each"'s receiver will be an instance of a class that includes the
> > module Enumerable and "size"'s receiver will be an instance of the class
> > Array. Example:
> >
> > array = Array.new
> > p array.size # => 0
> >
> > class MyEnumerable
> > include Enumerable
> >
> > end
> >
> > foo = MyEnumerable.new
> > foo.each_with_index # doesn't raise, the method is defined
> >
>
> Hi Andrea,
>
> Thank you very much. So the receiver can be omitted when the method is
> called within a class, right?
>
> Li


From: Josh Cheek on
[Note: parts of this message were removed to make it a legal post.]

On Sun, Apr 11, 2010 at 2:15 PM, Li Chen <chen_li3(a)yahoo.com> wrote:

> Hi Andrea,
>
> Thank you very much. So the receiver can be omitted when the method is
> called within a class, right?
>
> Li
> --
> Posted via http://www.ruby-forum.com/.
>
>
Except on assignments, because it looks like you are creating a local
variable.
Example:

class Foo
attr_accessor :bar
def bad_assign
bar = 'baz'
defined? bar
end
def good_assign
self.bar = 'baz'
defined? bar
end
end

foo = Foo.new

foo.bad_assign # => "local-variable"
foo.bar # => nil

foo.good_assign # => "method"
foo.bar # => "baz"