本帖最后由 余烬之中 于 2014-2-3 20:44 编辑
david_ng223 发表于 2014-2-2 23:53
A_B_C和B_C_D是标识符
a和b是變量
兩者都是輸出234,即是兩者沒有分別??
首先 【标识符】并不是常量专属的名称 凡是任何用于指代某对象 由使用者自定义的字符序列都是标识符
比如 local_var = 3 其中local_var就是标识符 @ins_var = 0 @ins_var是 $glo_var = 9 $glo_var是 CON = "Hi" CON是 甚至【module AMOD】AMOD也是 【class CLS】CLS也是
常量和变量都可以提前操作 至于这句话:说的是不能动态的改变
看两个例子
=======================================================CON = 100 p CON #=>100 CON += 50 #warning: already initialized constant CON p CON #=>150 another_var = CON p another_var #=> 150
CON = 100
p CON
#=>100
CON += 50
#warning: already initialized constant CON
p CON
#=>150
another_var = CON
p another_var #=> 150
在给常量第一次赋值以后 再对其赋值就会出现警告 但是不出错 继续执行 所以赋值还是能够成功
现在加上这样一段def met CON += 3 p CON end #SyntaxError:dynamic constant assignment met
def met
CON += 3
p CON
end #SyntaxError:dynamic constant assignment
met
这样的话这段代码无法通过语法检查 一句都不会执行 包括上面的100 150等
=======================================================
=======================================================loc = 100 p loc #=>100 loc += 50 p loc #=>150 another_var = loc p another_var #=> 150 def met loc += 3 p loc end met #undefined method '+' for nil:NilClass
loc = 100
p loc
#=>100
loc += 50
p loc
#=>150
another_var = loc
p another_var #=> 150
def met
loc += 3
p loc
end
met
#undefined method '+' for nil:NilClass
这里也会出错 但是语法是正确的 它会输出100 150 150 然后报错 这里出错的原因是loc是局部变量 无法被met方法获取 但是其他变量可以
而且这里也没有出现警报
我们换成实例变量试试
[url=home.php?mod=space&uid=77065]@ins[/url] = 100 # 坑人神句 下面不加井号之间的就是这样的结果 @ins#-=-=-=-=-=-=-=-=-=-=-=-=# = 100 #←把井号及之间的删掉 p @ins #=>100 @ins#-=-=-=-=-=-=-=-=-=-=-=-=# += 50 #←把井号及之间的删掉 p @ins #=>150 another_var = @ins p another_var #=> 150 def met [url=home.php?mod=space&uid=77065]@ins[/url] += 3 p @ins end met #=>153
[url=home.php?mod=space&uid=77065]@ins[/url] = 100 # 坑人神句 下面不加井号之间的就是这样的结果
@ins#-=-=-=-=-=-=-=-=-=-=-=-=# = 100 #←把井号及之间的删掉
p @ins
#=>100
@ins#-=-=-=-=-=-=-=-=-=-=-=-=# += 50 #←把井号及之间的删掉
p @ins
#=>150
another_var = @ins
p another_var #=> 150
def met
[url=home.php?mod=space&uid=77065]@ins[/url] += 3
p @ins
end
met
#=>153
总体输出结果是 100 150 150 153
全局变量 类变量等结果一样 不过你暂时不用去管 记得是变量就行了
=======================================================
总结就是 常量的值不能被动态改变(方法中) 连语法都不允许 如果在方法外重新赋值 会出现警报 但是赋值本身还是成功的
变量的值能够被动态改变 只要方法能够获得该变量 就允许对他进行操作 |