Project1

标题: 脚本问题 关于变量的疑问 [打印本页]

作者: Dim_knight    时间: 2008-5-14 16:12
标题: 脚本问题 关于变量的疑问
今天看完有关变量与常量的教程后感觉很疑惑
据我理解变量分4种
第一种为 局部变量 只能在 方法类中使用
第二种为 在方法 中 定义的变量 以@开头的
第三种为 在方法 外 定义的变量 以@@开头
第四种为 以$开头的 全局变量 可在所有类中调用

疑问~~~~~~~
一、第二种变量与第三种有何区别?
二、变量与常量的关系?
三、A_CONSTANT为什么没加$算是全局变量,它到底是变量还是常量?

A_CONSTANT=100
class Constant_Test_1
ANOTHER_CONSTANT=50
def initialize
print ANOTHER_CONSTANT
print A_CONSTANT
end
end



例子 第一种
class Local_Variable
def method_1
   local_variable=2
end
def method_2
   local_variable=3
end
end
     第二种
lass Instance_Variable
def method_1
   @instance_variable=2
end
def method_2
   @instance_variable=4
end
end
     第三种
class Class_Variable
@@class_variable=0
def initialize
   @@class_variable+=1
end
end
     第四种
class Global_Variable_1
def initialize
   $global_variable=0
end
end
class Global_Variable_2
def initialize
   $global_variable+=1
end
end

作者: 禾西    时间: 2008-5-14 16:45
1.你自己不是說出來了嗎?
2.定值與不定值的關係...(其實就是會不會占用內存位置的分別)
3.A_CONSTANT以大寫開頭,當然是常量啊!怎麼會是全局變量?(敲。)
提問之前先爬爬置頂帖子是習慣,給你引用兩個references
http://rpg.blue/viewthread.php?tid=81167
http://rpg.blue/viewthread.php?tid=84430
作者: link006007    时间: 2008-5-14 18:44
一、第二种变量与第三种有何区别?
@@ 其实是类变量   就是这个类的静态变量,这个变量在所有类中共享
class Val
  @@static_v = 0
  def initialize
    @@static_v += 1
  end
  def pstatic
    p @@static_v
  end
end
a = Val.new
a.pstatic
b = Val.new
a.pstatic
b.pstatic
二、变量与常量的关系?
常量就是不可变的量
三、A_CONSTANT为什么没加$算是全局变量,它到底是变量还是常量?
A_CONSTANT 其实是局部变量  只是他是在一开始就生成的, 所以它的作用域是全局的,
正好和$效果一样罢了 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 禾西    时间: 2008-5-14 19:03
順道我也問一下好了...
其實@ 與 @@ 究竟有啥分別,兩者都可以在方法當中定義、修改...
(除第一個能在方法外初定義,不過實際上也沒有甚麽用,常量更好)

不會好寫來以備萬一吧?==
作者: link006007    时间: 2008-5-14 21:04
@@ 是在同一个类的所有实例中可以共享的变量, 也就是@@变量在同一个类的所有实例中,值都是一样的, 同一个类的所有实例都引用来之同一个地方的变量
作者: 禾西    时间: 2008-5-14 21:06
原來如此....
作者: Dim_knight    时间: 2008-5-14 23:33
明白了
谢谢指点 ~{/cy}




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