在Ruby中使用foreach的奇怪问题

时间:2011-08-24 19:01:49

标签: ruby-on-rails ruby ruby-on-rails-3

当我在Ruby中编写下面的代码时,它给了我一个错误:

x = "c:/"
y = "Users/Amiref"
z = "/"
h = "Downloads"
v= x+y+z+h
Dir.foreach("v") do |i|
  puts i
end

但是当我使用下面的代码时,Ruby不会给我任何错误:

Dir.foreach("c:/Users/Amiref/Downloads") do |i|
  puts i
end

我真的很困惑。请帮我 。 感谢

5 个答案:

答案 0 :(得分:4)

不应引用

v - 它被用作变量而不是字符串。

答案 1 :(得分:2)

这是因为你引用了v

这意味着您正在浏览一个名为v的目录,该目录可能不存在。 :)

删除引号,它将是您想要的目录。

答案 2 :(得分:1)

您需要Dir.foreach(v),而v

附近没有引号

答案 3 :(得分:1)

正如其他答案所公布的那样:你可能不引用'v'。 另一个提示:相反,手动构建路径,可以使用File#join:

dir= File.join("c:", "Users", "Amiref", "Downloads")
Dir.foreach(dir) do |i|
  puts i
end

答案 4 :(得分:0)

代码

Dir.foreach("v") do |i|
  puts i
end

尝试遍历名为“v”的“目录”(很可能是\ v或c:\ v)并打印全部 文件和目录低于那个。

你真正的意思可能是

x = "c:/"
y = "Users/Amiref"
z = "/"
h = "Downloads"
v= x+y+z+h
Dir.foreach(v) do |i|
  puts i
end

<强>然而 我建议使用File#join将文件夹连接在一起,这样你就可以独立于平台(无论如何),而且不必像这样摆弄windows backslashes()和unix样式斜杠(/):

dir_path = File.join("C:", "Users", "Amiret", "Downloads")
Dir.foreach(dirpath) do |dir|
  puts dir
end
相关问题