From: Li Chen on 11 Apr 2010 13:48 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 11 Apr 2010 14:28 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 11 Apr 2010 15:15 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 11 Apr 2010 17:34 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 11 Apr 2010 19:25 [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"
|
Next
|
Last
Pages: 1 2 Prev: Text Fighting (Gladitorial) Sim Next: Help finish the Nokogiri Java port |