查看完整版本: A.5 例子—辨析——说明

quzhongwei 2008-6-13 18:04

A.5 例子—辨析——说明

请研究下列程序,你会有非常意外的收获:[code]class A
    a = 111  
    def aa
        a
    end
    def aa=(aa)
        a = aa
    end
    #aa
    #aa(1)
end
b = A.new
#b.aa
b.aa = 1
#puts b.aa

class B
    @a = 111
    def a
        @a
    end
    def a=(bb)
        @a = bb
    end
    def aa
        @a
    end
    def aaa
        puts @a
    end
    #aaa
    puts @a
end
b=B.new
puts b.a
b.a=1
puts b.a
b.a=2
puts b.a
puts b.aa
puts b.aaa[/code]我会给出详细说明的!:victory:

libaoming 2008-6-14 09:24

class A初解析

class A
      a= 111 #局部变量,范围在class A中
      def aa
          a  #class A的局部变量a,在此已无效,一但使用即有NameError错
      end
      def aa=(aa)
          a = aa #如 a = 1,也就意味着此方法中又有了个a的同名变量,作用域在此方法中
      puts a end   
       #aa    使用就有NameError
       #aa(1) 没有此方法,
       #aa=(1) 或 aa = 1 或 aa=1 都正确
end

libaoming 2008-6-14 10:01

class B初解析

class B
    @a = 111
    def a
          @a
    end
    def a=(bb)
          @a = bb
    end
    def aa
          @a
    end
    def aaa
          puts @a
    end  
    #aaa  NameError错
    #B.new.aaa  实例变量要由实例来调用,此时@a=nil,因为没赋值
  end
b = B.new
puts b.a #输出nil
b.a=1 #赋值1
puts b.a #输出1
puts b.aaa #输出1,因为是实例并没改变
c = B.new
puts c.aa #输出nil

libaoming 2008-6-14 10:02

期待,讲师给出,更精准的解析
up~~

dong123qwe 2008-6-14 17:50

看完了,也在期待更新。
有吸引

wosmvp 2008-6-14 18:52

libaoming说的好像有错误吧…… :)


以这个为例吧
class A
  a= 111 #局部变量,范围在class A中
  def aa
    a #class A的局部变量a,在此已无效,一但使用即有NameError错
  end
  def aa=(aa)
    a = aa #如 a = 1,也就意味着此方法中又有了个a的同名变量,作用域在此方法中
  puts a end
   #aa  使用就有NameError
   #aa(1) 没有此方法,
   #aa=(1) 或 aa = 1 或 aa=1 都正确
end


最后调用aa为没有该方法
aa(1)也为没有该方法
aa=1呢,也不是调用的方法,只是 赋值aa为1

如果要调用方法的话
A.new.aa 为NameError
A.new.aa(1)为错误的参数
A.new.aa=1 为调用方法。以1为参数

libaoming 2008-6-16 08:34

"A.new.aa(1)为错误的参数" 在类外调用当然是报错误的参数错了,但我说的是在类中使用的情况 它就报 "undefined method"错了
我说的是类中使用(没说调用)
而你说的情况是在类外调用,当然报的错不一样了。

5swords 2008-6-17 08:59

谢谢, 例子很好, 从例子看来

1. 局部变量在class级一点用处没有, 根本不应该出现.
它只能而且应该在方法里使用. 而只有实例变量才可以被方法访问到.

2. 实例方法不能在类里调用, 只有类方法可以.

toawinner47 2008-8-23 02:03

请问行首绿色竖线和行号怎么挵出来的,代码是什么?

[[i] 本帖最后由 toawinner47 于 2008-8-24 00:53 编辑 [/i]]

grrrr6670 2008-10-14 15:23

我来学习的。期待正解

feelsky 2008-10-16 16:17

好,加油!:)
页: [1]
查看完整版本: A.5 例子—辨析——说明