我想知道为什么编写File
库的人决定制作参数来确定文件以字符串而不是符号打开的模式。
例如,现在就是这样:
f = File.new('file', 'rw')
但这不是一个更好的设计吗
f = File.new('file', :rw)
甚至
f = File.new(:file, :rw)
例如?这似乎是使用它们的最佳位置,因为参数绝对不需要是可变的。
我很想知道它为什么会这样出现。
<小时/> 更新:我刚刚完成阅读a related question about symbols vs. strings,我认为共识是符号不像字符串那样众所周知,并且每个人都习惯使用字符串来索引哈希表。但是,我不认为Ruby标准库的设计者对符号主题的无知是有效的,所以我不认为这就是原因。
答案 0 :(得分:2)
我不是ruby历史的专家,但是当你想要一个方法的参数时,你真的有三个选择:字符串,符号和静态类。
例如,异常处理。每个异常实际上都是一种类Exception。
ArgumentError.is_a? Class
=> True
因此,您可以拥有该流的每个权限,这是它自己的类。但这需要为系统生成更多的类。
关于符号的事情是它们永远不会被删除。你生成的每个符号都会无限期地保留下来;这就是为什么不鼓励使用'.to_sym'方法的原因。它会导致内存泄漏。
字符串更容易操作。如果你从用户那里获得了输入模式,你需要在代码中的某处或者至少需要一个大的switch语句中的'.to_sym'。使用字符串,您可以直接将用户输入传递给方法(当然,如果您非常信任的话)。
此外,在C中,您将字符传递给文件i / o方法。红宝石中没有Chars,只有字符串。看看红宝石是如何建立在C上的,它可能就是它的来源。
答案 1 :(得分:1)
它只是以前语言的遗物。