def name=(r) 与 def name(r) 有什么区别
class A
def name=(val)
@name = val
end
end
a = A.new
a.name = 3
p @name # 在class外 所以显示出来为nil
def name=(val)
@name = val
p @name
end
end
a = A.new
a.name = 3
# 在class內 所以每次调用都会显示出来 而不是nill
def name=(val)
@name = val
end
end
a = A.new
a.name = 3
def name(val)
@name = val
end
end
a = A.new
a.name(3)
以下引用redant于2009-3-10 10:16:20的发言:
我也有问题还不大懂 = =
class A
def name=(r)
@name = r
$g=@name
end
end
p $g # nil 是因为确实没有
a = A.new;
a.name = 3
p $g # 3 name被赋值为3
p @name #nil 是因为@name 不能被读取 但其实已经改变?
class A
def name(r)
@name = r
$g=@name
end
end
p $g # 3 name赋值为3 没有变
a = A.new;
a.name(8)
p $g # 8 被重新赋值为8
exit
还有就是def name=(r)
= 为什么要紧挨着name ?
以下引用八云蓝于2009-3-10 12:18:02的发言:
以下引用Quarcy于2009-3-10 12:28:37的发言:
Ruby裏面應該沒有「重載」這個概念……某次想用重載功能來寫一點東西,結果死活找不到相關說明。在某個討論當中甚至看到有人說:「像是Ruby這樣的弱類型語言不需要重載功能……」
而事實上也的確如此。因此,我更認為把「name=」當作一個整體方法名字來處理比較好,就像「include?」一樣。不過祗是允許調用的時候把「=」隔離變成這樣「.name = 」……算是特例吧--
(2009-3-10 11:41:25) [redant]
就是 = 紧挨着的话 就是方法的一部分
单个 = 就是赋值
是这样么?
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |