ruby - 简单的 Ruby 变量可变性

标签 ruby

我对以下 Ruby 代码有点困惑:

a = "hello"
b = a

a #=> "hello"
b #=> "hello"

a.upcase!

a #=> "HELLO"
b #=> "HELLO"

a = a.capitalize

a #=> "Hello"
b #=> "HELLO"

为什么a.upcase!会影响b的值,而a = a.capitalize却不会?

最佳答案

执行a.capitalize!这也会影响b

发生了什么?

当您大写时,会返回字符串的副本,其中第一个字符转换为大写,其余字符转换为小写。您刚刚将其分配给变量a。然而,b仍然指向a的旧值,即HELLO

但是,当您执行大写!时,字符串本身会被修改,因此b也会受到影响。

示例:

a = "hello"
b = a
a.capitalize
# => "Hello"
a
# => "hello" # remains unchanged
b
# => "hello" # which is the actual value of a
a.capitalize!
# => "Hello"
a
# => "Hello" # a's value is changed
b
# => "Hello" # which is the actual value of a

关于ruby - 简单的 Ruby 变量可变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28721836/

相关文章:

mysql - Mysql 2 的 Rails 错误

ruby - 从 crontab 运行 bundle exec

ruby - 用循环创建多个变量?

mysql - 字段名有 '?' 的问题

ruby: irb 给出 NameError attempt to use mechanize gem (ubuntu)

ruby - 如何使用 `gsub` 将多个子字符串替换为相同的字符串

Ruby 最小最大赋值运算符

ruby - 疑问句和感叹句的方法

ruby - 如何在 Ruby 中的 RestClient gem 中设置超时?

javascript - 对于最终用户可编辑的文本替换占位符的简单解决方案是什么?