如何在Ruby符号中使用斜杠/
?我正在尝试使用符号来表示文件名而不是字符串,但我无法弄清楚如何使用符号引用文件路径的两个级别。例如,您如何将articles/show
表示为Ruby符号?
答案 0 :(得分:3)
:'articles/show'
Lot http://www.troubleshooters.com/codecorn/ruby/symbols.htm
的更多信息答案 1 :(得分:2)
您可以使用to_sym
将字符串转换为符号:
'a/b'.to_sym # => :"a/b"
然而,仅仅因为你可以做到这一点,并不意味着你应该这样做。我们使用符号是有原因的,例如节省内存和查找速度稍快一些,但有时节省的成本并不会超过它们引入的问题,例如在尝试使用它们作为文件名时。
这个问题看起来像是“XY problem”,这意味着你问的是“Y”,但确实需要处理“X”。
在普通脚本中,我们可能需要打开一些文件,这意味着只需要少量字符串,而符号几乎不会帮助节省字符串版本的空间。如果您正在阅读大量文件,则不应在代码中定义它们,而是将名称存储在单独的文件中,然后迭代该文件,检索文件名,然后对其进行处理, - 酮
IO类不期望符号。运行:
puts File.foreach('test.txt'.to_sym).to_a
结果:
`foreach': no implicit conversion of Symbol into String (TypeError)
这不是一个好兆头,并且意味着,要使用符号而不是字符串,您必须重新实现所有IO方法或动态转换为字符串。
这也意味着方便方法,就像join
一样,不起作用。我们通常可以做的事情:
File.join('a', 'b') # => "a/b"
传入符号会导致:
File.join(:a, :b) # =>
# ~> -:2:in `join': no implicit conversion of Symbol into String (TypeError)
# ~> from -:2:in `<main>'
并使用类似的东西:
File.join(:a.to_s, :b.to_s).to_sym # => :"a/b"
似乎真正浪费了打字和CPU时间,只会使问题进一步复杂化。