3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
Q1:當(dāng)你給一個(gè)新變量賦值時(shí)會(huì)發(fā)生什么? str
值為. 'foo'
?
str = 'foo'str.object_id # => 2000
A:一個(gè)叫做 str
創(chuàng)建指向?qū)ο蟮?/trans>'foo'
,對(duì)于這個(gè)Ruby解釋器的狀態(tài),它恰好位于內(nèi)存位置。 2000
.
'foo'
2000
.Q2:賦值現(xiàn)有變量時(shí)會(huì)發(fā)生什么? str
使用 =
?
str = 'bar'.tap{|b| puts "bar: #{b.object_id}"} # bar: 2002str.object_id # => 2002
A:標(biāo)簽 str
現(xiàn)在指向另一個(gè)對(duì)象。
Q3:當(dāng)你給一個(gè)新變量賦值時(shí)會(huì)發(fā)生什么? =
到 str
?
str2 = str str2.object_id # => 2002
A:一個(gè)新的標(biāo)簽叫做 str2
創(chuàng)建,指向 同一對(duì)象如 str
.
Q4:如果被 str
和 str2
變了?
str2.replace 'baz'str2 # => 'baz'str # => 'baz'str.object_id # => 2002str2.object_id # => 2002
答:兩個(gè)標(biāo)簽仍然指向同一個(gè)對(duì)象,但該對(duì)象本身發(fā)生了變異(其內(nèi)容已更改為其他內(nèi)容)。
這與原來(lái)的問題有何關(guān)系?
str2
str
str
指點(diǎn)
str = 'foo'def mutate(str2) puts "str2: #{str2.object_id}" str2.replace 'bar' str2 = 'baz' puts "str2: #{str2.object_id}"endstr.object_id # => 2004mutate(str) # str2: 2004, str2: 2006str # => "bar"str.object_id # => 2004

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
Ruby是按引用傳遞還是按值傳遞?
def foo(bar) bar = 'reference'endbaz = 'value'foo(baz)puts "Ruby is pass-by-#{baz}"# Ruby is pass-by-value
- 3 回答
- 0 關(guān)注
- 540 瀏覽
添加回答
舉報(bào)