| 本帖最后由 余烬之中 于 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 = 100p CON#=>100CON += 50#warning: already initialized constant CONp CON#=>150another_var = CONp 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 CONend #SyntaxError:dynamic constant assignment met
这样的话这段代码无法通过语法检查 一句都不会执行 包括上面的100 150等def met 
  CON += 3 
  p CON 
end #SyntaxError:dynamic constant assignment 
  
met 
=======================================================
 =======================================================
 loc = 100p loc#=>100loc += 50p loc#=>150another_var = locp another_var #=> 150 def met  loc += 3  p locend met#undefined method '+' for nil:NilClass
这里也会出错 但是语法是正确的 它会输出100 150 150 然后报错 这里出错的原因是loc是局部变量 无法被met方法获取 但是其他变量可以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 
而且这里也没有出现警报
 我们换成实例变量试试
 
 [url=home.php?mod=space&uid=77065]@ins[/url] = 100 # 坑人神句 下面不加井号之间的就是这样的结果@ins#-=-=-=-=-=-=-=-=-=-=-=-=# = 100  #←把井号及之间的删掉p @ins#=>100@ins#-=-=-=-=-=-=-=-=-=-=-=-=# += 50  #←把井号及之间的删掉p @ins#=>150another_var = @insp another_var #=> 150 def met  [url=home.php?mod=space&uid=77065]@ins[/url] += 3  p @insend met#=>153
总体输出结果是 100 150 150 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 
全局变量 类变量等结果一样 不过你暂时不用去管 记得是变量就行了
 =======================================================
 总结就是 常量的值不能被动态改变(方法中) 连语法都不允许 如果在方法外重新赋值 会出现警报 但是赋值本身还是成功的
 变量的值能够被动态改变 只要方法能够获得该变量 就允许对他进行操作
 |