有一些重用字符串的方法吗?

时间:2019-07-15 05:16:33

标签: ruby

以防万一,

A = "A"
B = "#{A}"

B = "A",对吧?

现在我想更改(A = "C"),并希望B也受A的影响而更改。

有什么办法吗?

2 个答案:

答案 0 :(得分:4)

让我们先谈谈命名约定。大写标识符用于Ruby中的常量。默认情况下,为已初始化的常量分配新值会在Ruby中引发警告:

A = 'B'
A = 'C'
#=> warning: already initialized constant A
#=> warning: previous definition of A was here

因此,在以下示例中,我将使用普通的实例变量和读取器方法。正如Pascal Betz指出的那样:如果您希望b依赖于a的当前值,那么b应该是一种方法:

def b
  @a
end

@a = 'A'
b
#=> "A"

@a = 'C'
b
#=> "C"

答案 1 :(得分:2)

如果您这样做:

a = "A"
b = "#{a}"

ab是具有相同内容的字符串,但它们不是相同的对象:

b == a
# => true
b.equal? a
# => false
a.object_id
# => 24494240
b.object_id
# => 24679880

Ruby字符串是可变的。因此,如果ba引用相同的字符串,则修改a也会自动更新b

a = "A"
# => "A" 
b = a
# => "A" 
a.replace 'C'
# => "C" 
b
# => "C" 

它可以双向使用:

b.gsub!('C', 'D')
# => "D" 
a
# => "D"