It's the reverse of this question: Why can't strings be mutable in Java and .NET?

在Ruby中做出这样的 Select 是因为操作(附录等)对可变字符串有效,还是因为其他原因?

(如果只是效率的话,那就很奇怪了,因为Ruby的设计似乎没有高度重视促进高效的实现.)

推荐答案

正如你所注意到的,这与Ruby的设计是一致的.不可变字符串比可变字符串更有效——由于字符串被重复使用,复制更少——但这会让程序员的工作更加困难.直观地看,字符串是可变的——可以将它们连接在一起.为了解决这个问题,Java默默地将两个字符串的串联(通过+)转换为StringBuffer对象的使用,我相信还有其他类似的攻击.相反,Ruby Select 以牺牲性能为代价,使字符串在默认情况下是可变的.

Ruby还有许多 destruct 性的方法,比如String#upcase!,它们依赖于字符串的可变性.

另一个可能的原因是Ruby的灵感来自Perl,而Perl恰好使用可变字符串.

Ruby有符号和冻结字符串,它们都是不可变的.作为额外的奖励,每个可能的字符串值的符号都保证是唯一的.

Ruby相关问答推荐

为什么 rdoc 注释似乎以两个井号/井号符号开头?

回声ABC | ruby -p -e "sub('a','A').sub('b', 'B')": 为什么不是 "ABc"?

如果 Java 人go Scala,C# go F#,那么 Ruby 人go 哪里寻求函数式?

python:pythonbrew 和 virtualenv 有什么区别?

需要Ruby

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

将ruby数组转换为连续对数组

如何正确截断表格?

Ruby 连接字符串并添加空格

判断 Ruby Gem 的可用性

根据另一个数组的元素对数组进行排序

Ruby - 查看端口是否打开

Unexpected Return (LocalJumpError)

Ruby 中的文件打开模式

创建一个接受参数散列的 ruby​​ 方法

为什么 Ruby 文档中的方法前面有一个井号?

Ruby:define_method 与 def

Ruby:是否可以在模块中定义类方法?

Ruby:从 Ruby 中的变量创建哈希键和值

Ruby 类继承:什么是`<<`(双倍小于)?