欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Ruby編程中的賦值相關(guān)操作

 更新時(shí)間:2015年07月13日 12:07:28   投稿:goldensun  
這篇文章主要介紹了Ruby編程中的賦值相關(guān)操作,是Ruby入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

在老版本的Ruby中,賦值語(yǔ)句的返回值是設(shè)置該屬性的方法的返回值。在Ruby1.8中,賦值語(yǔ)句的值總是參數(shù)的值而方法的返回值將被丟掉。
 

class Test
  def val=(val)
    @val = val
    return 99
  end    
end
 
t = Test.new
a = t.val=2
a           ->2

 在老版本中,a將被賦值語(yǔ)句設(shè)置為99,而在Ruby1.8中,它的值為2.

Ruby的賦值實(shí)際是以并行方式執(zhí)行的,所以賦值語(yǔ)句右邊的值不受賦值語(yǔ)句本身的影響。在左邊的任意一個(gè)變量或者屬性被賦值之前,右邊的值按它們出現(xiàn)的順序被計(jì)算出來(lái)。下面這個(gè)人為設(shè)計(jì)的例子說(shuō)明了這一點(diǎn)。第二行講表達(dá)式x ,x+=1和x+=1的值分別賦值給變量a、b和c。
 

x = 0                 -> 0
a,b,c =x,(x+=1),(x+=1)   ->[0,1,2]

當(dāng)賦值語(yǔ)句有多于一個(gè)左值時(shí),賦值表達(dá)式將返回由右值組成的數(shù)組。如果賦值語(yǔ)句的左值多于右值,那么多余的左值將被忽略。如果右值多余左值,那么額外的右值將被忽略。如果賦值語(yǔ)句僅有一個(gè)左值而有多個(gè)右值,那么右值將被轉(zhuǎn)換成數(shù)組,然后賦值給左值。

 其實(shí),可寫屬性有個(gè)隱藏的陷阱。通常,類中的方法可以通過(guò)函數(shù)形式(即帶一個(gè)隱式self作為接收者)調(diào)用同一個(gè)類的其他方法和它的父類的方法。然而這不適用于屬性賦值函數(shù):Ruby看到賦值語(yǔ)句時(shí),會(huì)認(rèn)為左邊的名字是局部變量,而不是一個(gè)為屬性賦值的方法調(diào)用。
 

class BrokenAmplifier
 attr_accessor :left_channel, :right_channel
 def volume=(vol)
   left_channel = self.right_channel = vol     
 end  
end
 
ba = BrokenAmplifier.new
ba.left_channel = ba.right_channel =99
ba.volume=5
ba.left_channel          ->99
ba.right_channel         ->5

  在上面的賦值語(yǔ)句中,我們忘了給left_channel加"self."前綴,所以Ruby存儲(chǔ)新值給volume= 方法的局部變量,因?yàn)楦緵](méi)有更新對(duì)象屬性。這會(huì)成為難以追蹤的缺陷

相關(guān)文章

最新評(píng)論