gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:39 25 4
gpt4 key购买 nike

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

比如现在是这样的:

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

但这不是更好的设计吗

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

甚至

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

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

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


更新:我刚读完 a related question about symbols vs. strings ,我认为大家的共识是,符号只是不如字符串广为人知,反正大家都习惯用字符串来索引哈希表。但是,我认为 Ruby 标准库的设计者以对符号主题一无所知为由辩护是不合理的,所以我认为这不是原因。

最佳答案

我不是 ruby​​ 历史方面的专家,但是当您想要方法的参数时,您确实有三种选择:字符串、符号和静态类。

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

ArgumentError.is_a? Class
=> True

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

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

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

此外,在 C 中,您将一个字符传递给文件 i/o 方法。 ruby 中没有字符,只有字符串。看看 ruby​​ 是如何基于 C 构建的,这可能就是它的来源。

关于ruby - 为什么 File.new 的参数不是符号而是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7541911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com