ruby基本类的问题

ruby基本类的问题

这里有一个简单问题,可能和java/c混淆了,请大家帮帮忙
代码如下:
#####################################
line1    class GF

line2      def initialize

line3       puts "In class GF"

line4      end

line5      def gf_method

line6       puts "GF method call"

line7      end

line8    end

line9    class F < GF

line10      def initialize

line11       puts "In class F"

line12      end

line13    end

line14    class S < F

line15      def initialize(aName)

line16       @name = aName

line17       puts "In class S"

line18      end

line19      son = S.new( 'qq' )

line20      son.gf_method

line21      p( son )

line22    end

line23    s = S.new( 'ww' )

line24    s.inspect
######################################
1、[ ruby -w]模式调试,line24没反应,也没有报错,为什么?

2、line19, ruby 可以在自己类内部建立本类?

3、line23, 为何new了,自line19-line21没有执行?
自己顶一下,问题一有点眉目,puts "#{s.inspect}"即可,但为何没有报错呢
又有新问题,运行结果如下
######################################
C:\SOURCE~1\ruby\simple\lr>ruby -w inherit.rb
In class S
GF method call
#<S:0x293f8d0 @name="qq">
In class S
#<S:0x293f858 @name="ww">

C:\SOURCE~1\ruby\simple\lr>ruby -w inherit.rb
In class S
GF method call
#<S:0x293f8d0 @name="qq">
In class S
#<S:0x293f858 @name="ww">
######################################
为何两次0x293f858 和0x293f8d0 是一样的?
你是说什么一样?怎么看不懂你的问题
我的问题是:
1、ruby 的inspect方法如何使用
2、ruby的类为何可以在内部建立该类的实例
3、既然可以建立该类的实例,为何在该类外部再new后,该类内部建立实例的代码没有执行?
4、调用ruby命令运行包含上述代码的rb文件两次,为何生成的类的地址?都一样?
1.inject方法
[1,2,3].inject([]) do |a, item|
     p a
     a << item
   end
此时输出:
   []
   [1]
   [1,2]
  => [1,2,3]
习惯写法:
代码

 1. (1..10).inject([]){|array, item| array << item} 
第二种形式:
代码

 1. (1..10).inject{|sum, item| sum += item} 
 2. 这个等于 
 3. (1..10).inject(0){|sum, item| sum += item}


第一种形式允许你为array提供一个初始值,第二种形式使用管道里第一个参数做初始值
3).inspect方法默认将对象的ID和实例变量格式化。

2.Ruby就这样吧,动态语言特性
3.类在被解释器加载的时候会执行代码体,所以定义了内部类的实例,但是当外部new这个类的对象的时候,只是调用的构造函数,没有执行内部new的那段代码。所以就是你看到的结果。
4。不太清楚,我在irb下执行两次产生的实例不一样,可能和执行方式有关系。

你用的什么编辑器啊。。。?
谢谢blackanger兄
我很简单,就在xp下用cmd:[ ruby -w *.rb ],再复杂点,也就[ irb ]一下。
谢谢你对inject方法的详细解释。
关于[3.类在被解释器加载的时候会执行代码体,所以定义了内部类的实例,但是当外部new这个类的对象的时候,只是调用的构造函数,没有执行内部new的那段代码。所以就是你看到的结果。]
我的看法不知道对不对:这个大概就是所谓的object 变量/方法和instance 变量/方法的区别吧。object.new后,只能看到instance的变量/方法了。
我的眼神太不好了,你问的不是jnject方法,我看错了。
对3的理解可能错误了吧,不是类变量/方法和实例变量/方法的区别
是Ruby程序执行的一个过程。

[ 本帖最后由 blackanger 于 2007-8-21 11:27 编辑 ]
有道理。在new的时刻可能只有constructor执行了