Ruby 如何覆盖`File::SEPARATOR`
向下列国家提供的文件:Ruby 如何覆盖`File::SEPARATOR`,ruby,separator,pseudo-globals,Ruby,Separator,Pseudo Globals,向下列国家提供的文件: join(字符串,…)→ 字符串 返回通过使用File::SEPARATOR连接字符串而形成的新字符串 File.join(“usr”、“mail”、“gumby”)#=>“usr/mail/gumby” 但是,下面的结果显示了不同的行为 File::SEPARATOR #=> "/" File::SEPARATOR = "doge" File::SEPARATOR #=> "doge" File.join("so", "wow") #=> "so/wo
join(字符串,…)
→ <代码>字符串
返回通过使用File::SEPARATOR
连接字符串而形成的新字符串
File.join(“usr”、“mail”、“gumby”)#=>“usr/mail/gumby”
但是,下面的结果显示了不同的行为
File::SEPARATOR #=> "/"
File::SEPARATOR = "doge"
File::SEPARATOR #=> "doge"
File.join("so", "wow") #=> "so/wow"
有人能解释发生了什么事吗?有没有办法通过将File::SEPARATOR
设置为另一个值来覆盖此行为
我没有这方面的特定用例,也没有寻找解决方法。。只是好奇。提前谢谢。文件::分隔符是一个常量,您不能重新定义它。在Windows中还有
文件:ALT\u分隔符。也许你可以在这里找到答案:你在找Array.join吗
["usr", "mail", "gumby"].join("doge")
重写File::SEPARATOR是没有意义的,它是ruby“提供”给你的一个常量,因此你不需要猜测它是否是/或\File
给你一个File::SEPARATOR
常量,它为操作系统提供了正确的文件分隔符,以及File.join
方法,它使用操作系统的正确文件分隔符分隔参数
不管文档怎么说,函数似乎不使用常量
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中更改常量的值,这可能是一个很好的编程。当您定义重新定义常量时,所有未来的Ruby代码都会看到这个新值
但是,File.join
的实现是在C中实现的,它引用了您尚未重新定义的
任何C代码都会(在Ruby解释器初始化时设置),而任何Ruby代码都会引用重写/重新定义的值。这不是原因,因为Ruby中的常量可以重新定义。这只是一个警告。谢谢你提供的有用链接。谢谢,但我只是想找个解释。这个问题是由一位主持人编辑的,他让我看起来像是在寻找答案。很抱歉,我想我的第二句话解释了这一点。只是不要试图覆盖常量,不管怎样,这是一个糟糕的做法,我很清楚。只是想了解ruby内部是如何工作的。谢谢你。