首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何覆盖“`File::SEPARATOR`”

如何覆盖“`File::SEPARATOR`”
EN

Stack Overflow用户
提问于 2016-01-29 06:44:24
回答 4查看 903关注 0票数 7

File.join的文档声明:

join(string, ...)string 返回通过使用File::SEPARATOR连接字符串而形成的新字符串。 File.join("usr", "mail", "gumby") #=> "usr/mail/gumby"

然而,下面的结果显示了一种不同的行为。

代码语言:javascript
复制
File::SEPARATOR #=> "/"
File::SEPARATOR = "doge"
File::SEPARATOR #=> "doge"
File.join("so", "wow") #=> "so/wow"

有人能解释一下发生了什么吗?是否有方法通过将File::SEPARATOR设置为另一个值来覆盖此行为?

我对此没有具体的用例,也没有寻找解决办法。只是好奇而已。提前谢谢你。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-29 17:55:58

当您重新定义常量时,所有未来的Ruby代码都会看到这个新值。

但是,File.join的实现是在C中实现的,它引用尚未重新定义的分离器的C常数

任何C代码都将是引用原值 (在Ruby解释器初始化时设置的),而任何Ruby代码都将引用重写/重新定义的值。

票数 2
EN

Stack Overflow用户

发布于 2016-01-29 11:28:22

File为您提供了一个FILE::SEPARATOR常量,它为操作系统提供了正确的文件分隔符,也给出了File.join方法,该方法用操作系统的正确文件分隔符分隔参数。

似乎--不管文档怎么说--函数不使用常量。

代码语言:javascript
复制
2.3.0 :004 > File::Separator
 => "/"
2.3.0 :005 > File::Separator = "!!"
(irb):5: warning: already initialized constant File::Separator
 => "!!"
2.3.0 :006 > File::Separator
 => "!!"
2.3.0 :007 > File.join("one", "two")
 => "one/two"
2.3.0 :008 > File::Separator
 => "!!"

考虑到您可以在Ruby中更改常量的值,这可能只是很好的编程。

票数 1
EN

Stack Overflow用户

发布于 2016-01-29 08:36:08

File::SEPARATOR是一个常量,不能重新定义它。在Windows中也有File:ALT_SEPARATOR。也许你可以在这里找到答案:https://www.ruby-forum.com/topic/124904

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35078432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档