如何加入斜杠' /'成为Ruby符号?

时间:2014-11-23 02:36:11

标签: ruby-on-rails ruby

如何在Ruby符号中使用斜杠/?我正在尝试使用符号来表示文件名而不是字符串,但我无法弄清楚如何使用符号引用文件路径的两个级别。例如,您如何将articles/show表示为Ruby符号?

2 个答案:

答案 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时间,只会使问题进一步复杂化。