为什么不是File.new符号的参数而不是字符串?

时间:2011-09-24 21:03:58

标签: ruby language-design symbols

我想知道为什么编写File库的人决定制作参数来确定文件以字符串而不是符号打开的模式。

例如,现在就是这样:

f = File.new('file', 'rw')

但这不是一个更好的设计吗

f = File.new('file', :rw)

甚至

f = File.new(:file, :rw)

例如?这似乎是使用它们的最佳位置,因为参数绝对不需要是可变的。

我很想知道它为什么会这样出现。

<小时/> 更新:我刚刚完成阅读a related question about symbols vs. strings,我认为共识是符号不像字符串那样众所周知,并且每个人都习惯使用字符串来索引哈希表。但是,我不认为Ruby标准库的设计者对符号主题的无知是有效的,所以我不认为这就是原因。

2 个答案:

答案 0 :(得分:2)

我不是ruby历史的专家,但是当你想要一个方法的参数时,你真的有三个选择:字符串,符号和静态类。

例如,异常处理。每个异常实际上都是一种类Exception。

ArgumentError.is_a? Class
=> True

因此,您可以拥有该流的每个权限,这是它自己的类。但这需要为系统生成更多的类。

关于符号的事情是它们永远不会被删除。你生成的每个符号都会无限期地保留下来;这就是为什么不鼓励使用'.to_sym'方法的原因。它会导致内存泄漏。

字符串更容易操作。如果你从用户那里获得了输入模式,你需要在代码中的某处或者至少需要一个大的switch语句中的'.to_sym'。使用字符串,您可以直接将用户输入传递给方法(当然,如果您非常信任的话)。

此外,在C中,您将字符传递给文件i / o方法。红宝石中没有Chars,只有字符串。看看红宝石是如何建立在C上的,它可能就是它的来源。

答案 1 :(得分:1)

它只是以前语言的遗物。