Project1

标题: 小弟自学钻研脚本,遇到了困难,高手快来救命~ [打印本页]

作者: War3Badboy    时间: 2008-7-4 07:06
标题: 小弟自学钻研脚本,遇到了困难,高手快来救命~
     我是看软件附带教程的,有个地方这样说:
=============================================================================
实变量属于个体对象的变量称为实变量。名称以 @ 开头的变量,自动作为实变量使用。局部变量只有在 def ~ end 等结构内部使用时才有效,然而使用实变量的话,只要其对象存在,变量的值就会被保存。实变量一般作为对象的属性来使用。

class Person
  def name
    return @name
  end
  def name=(name)
    @name = name
  end
  def hello
    print "我是" + @name + ""
  end
end

alex = Person.new
alex.name = "艾力克斯"
alex.hello                  # => 我是艾力克斯

=================================================================================
我的疑问是,为什么要连续两次定义方法呢,要是两次定义,不是后次有效吗?那第一次不是白写了?

在调用的时候(如倒数第2行)直接用  alex.@name= "埃力克斯"    不是更好吗?

而且第2次 def~end 怎么写来写去都是name啊?好乱啊,谁可以为我解释一下?

第2次 def~end 中和def同行的应该是被定义的方法名称吧?怎么弄了个 name=(name) 这样的赋值式出来了?谁又解释一下啊?

万分感谢了,学到这里,我差不多也做了一本练习本的笔记了。 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: dna_7086    时间: 2008-7-4 07:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 禾西    时间: 2008-7-4 07:18
class Person
def name
# 通過 .name 方法去讀取本類的 @name 屬性
   return @name
end
def read
   return @name
end
def name=(val)
# 通過 name= 方法去改寫本類的 @name 值
# ( )當中的只是一個參數,用來傳遞數值用的,不要被名字迷惑
   @name = val
   p 'now you are using name=( ) method '
end
def write=(a)
   @name = a
end
end
person = Person.new
p person.@name #=>Error ! Undefined method '@name' for Person
p person.name  #=> nil
p person.read  #=> nil
p person.name = 100 #=> 100, 'now you are using name=( ) method '
p person.name  #=> 100
p person.read  #=> 100
p person.write = 200 #=> 200
p person.name  #=> 200
p person.read  #=> 200

不過...其實
.instance_variable_get('@name')
.instance_variable_set('@name'. 'orz')
會比較快 = = [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: War3Badboy    时间: 2008-7-4 22:07
十分感谢,我要把他抄在我的本子上,这样就用够一本了……




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1