Ruby';获取';行为怪异?
我写这个程序是为了管理dotfiles和get的行为似乎不像通常那样,我无法通过Google追踪相关信息Ruby';获取';行为怪异?,ruby,Ruby,我写这个程序是为了管理dotfiles和get的行为似乎不像通常那样,我无法通过Google追踪相关信息 #!/usr/bin/env ruby @filename = '' unless $*[0].nil? # Storing filename (and adding dot) @filename = "."+$*[0].to_s else # No filename given, exit and print to STDERR abort("No filename
#!/usr/bin/env ruby
@filename = ''
unless $*[0].nil?
# Storing filename (and adding dot)
@filename = "."+$*[0].to_s
else
# No filename given, exit and print to STDERR
abort("No filename specified")
end
@file_path = File.expand_path("~/#{@filename}")
if File.exists?(@file_path)
print "Enter something: "
gets
puts $_
end
但是,程序在“get”行崩溃,如下所示
$ ruby ./link.rb bash_profile
Enter something: /Users/krystah/repos/backpack/dotfiles/link.rb:24:in `gets':
No such file or directory - bash_profile (Errno::ENOENT)
from /Users/krystah/repos/backpack/dotfiles/link.rb:24:in `gets'
from /Users/krystah/repos/backpack/dotfiles/link.rb:24:in `<main>'
$ruby./link.rb bash\u配置文件
输入内容:/Users/krystah/repos/backpack/dotfiles/link.rb:24:in'get':
没有这样的文件或目录-bash_概要文件(Errno::enoint)
from/Users/krystah/repos/backpack/dotfiles/link.rb:24:in'get'
from/Users/krystah/repos/backpack/dotfiles/link.rb:24:in`'
来自:
获取(sep=$/)→ 字符串或零获取(限制)→ 字符串或零
获取(sep,限制)→ 字符串或零 从
ARGV
(或$*
)中的文件列表返回下一行(并将其分配给$);如果命令行上没有文件,则从标准输入返回下一行
您在ARGV
中确实有东西,因此gets
将尝试读取名为'bash_profile'
的文件,然后抱怨没有这样的文件。您可能希望更明确地了解您的阅读来源:
print "Enter something: "
$stdin.gets
puts $_
这实际上是一个非常有趣的问题<代码>获取(以及其中的许多其他函数)通常是为一行程序设计的,所以它们的行为以令人惊讶的方式专门化。一旦你了解了他们的意图,这种奇怪的行为就不那么令人惊讶了。来自:
获取(sep=$/)→ 字符串或零
获取(限制)→ 字符串或零
获取(sep,限制)→ 字符串或零
从ARGV
(或$*
)中的文件列表返回下一行(并将其分配给$);如果命令行上没有文件,则从标准输入返回下一行
您在ARGV
中确实有东西,因此gets
将尝试读取名为'bash_profile'
的文件,然后抱怨没有这样的文件。您可能希望更明确地了解您的阅读来源:
print "Enter something: "
$stdin.gets
puts $_
这实际上是一个非常有趣的问题<代码>获取(以及其中的许多其他函数)通常是为一行程序设计的,所以它们的行为以令人惊讶的方式专门化。一旦您了解了它们的预期用途,这种奇怪的行为就不那么令人惊讶了。似乎粘贴时遗漏了行号,但错误消息中的第24行确实等于File.exist子句中的gets行。似乎粘贴时遗漏了行号,但是错误消息中的第24行确实等于File.exist子句中的gets行。非常好的洞察力,非常感谢。:)实际上,我试图找到有关如何显式选择gets源的信息,但没有结果。无论如何,这解决了它,所以再次,谢谢!非常有洞察力,非常感谢。:)实际上,我试图找到有关如何显式选择gets源的信息,但没有结果。无论如何,这解决了它,所以再次,谢谢!