Sorry ,i am not show it very clear.Please read this example again:
class Test
def Test.say_hello
puts "Hello from #{self.name}"
puts "hello from #{self.class}"
end
say_hello #i don't understand here
ok I see now, well this is "simple" once you have grasped the concept,
but quite difficult before -- as so often
It might be helpful to grasp the concept of self before, I'd advice
Pickaxe for that Programming Ruby: The Pragmatic Programmer's Guide
now in Ruby there is always a self defined, the implicit receiver to
which unqualified messages are sent
Fire up your irb to learn a little bit more about that
536/37 > irb
irb(main):001:0> self
=> main
# This is the default self provided by the Ruby Interpreter
irb(main):002:0> class Test
### look what happens to self when inside a class statement
irb(main):003:1> puts self
irb(main):004:1> end
Test
=> nil
irb(main):005:0> class Test
### say_hello is sent to self, which is Test in this context
irb(main):006:1> say_hello
### but Test does not reply to this message yet
irb(main):007:1> end
NameError: undefined local variable or method `say_hello' for Test:Class
from (irb):6
irb(main):008:0> class Test
### The def statement defines an *instance* method on self, we have therefore
### to write Test.say_hello in order to tell def a method on Test
itself, but you
### seem to know that already
irb(main):009:1> def Test.say_hello
irb(main):010:2> puts "Hello"
irb(main):011:2> end
irb(main):012:1> end
=> nil
irb(main):013:0> class Test
### self is set to Test again and now Test responds to the #say_hello message
irb(main):014:1> say_hello
irb(main):015:1> end
Hello
=> nil
### and just to show that the main object was not influenced by what
we defined for Test
irb(main):020:0> say_hello
NameError: undefined local variable or method `say_hello' for main:Object
from (irb):20
irb(main):021:0>
end
Normally,we can use a class anyplaces after defining it ,but in this
example,i use a classmehod immediately after defining it "in class
context".This is valid.I means calling a classmethod(not an intance
method) in a class defintion--not after defining that class--is valid
.Can you explain it for me? thank you !
Funny but you explained it quite well, if there were no ? I would say
you have made a correct statement. Maybe you are just puzzled by the
dynamic nature of Ruby that everything springs into life when
executed.
class Test
dosomething
end
as a matter of fact is equivalent to
Test = Class::new
class Test
#(1)
doesomething
end
meaning that at point (1) Test is a well defined complete Ruby class already
HTH
Robert
···
On 7/29/07, Guo Yangguang <gyg22@163.com> wrote:
from :0
from :0
Robert Dober wrote:
> On 7/29/07, Guo Yangguang <gyg22@163.com> wrote:
>> end
>> say_hello
>> end
>>
> It is not completely clear what you want to achieve but some remarks
> might be helpful
>
> class Test
> def initialize
> e="e" # this code is not realy useful, e is a scope local
> variable that will be thrown away, you probably want to do this:
> @e = "e" # this is an instance variable
> end
>
> attr_accessor :e # for some tests below
>
> def Test.say_hello
> ...
> end
> say_hello
> end
>
> Test.say_hello
> aTest = Test.new
> puts aTest.e
> aTest.e = 42
> puts aTest.e
--
Posted via http://www.ruby-forum.com/\.
--
[...] as simple as possible, but no simpler.
-- Attributed to Albert Einstein