Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何覆盖`File::SEPARATOR`_Ruby_Separator_Pseudo Globals - Fatal编程技术网

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内部是如何工作的。谢谢你。