在Ruby中获取用户输入时遇到问题

时间:2014-12-10 06:27:10

标签: ruby

我有一个检查文件是否存在的方法,如果文件不存在,那么它应该调用另一个提示问题的方法。以下是示例代码。

def readFile1()
      flag = false

      begin
        @ssh.exec!("cd #{@@home_dir}")

        puts "\nChecking if file exists on #{@hostname}\n"

        if @ssh.exec!("sh -c '[ -f "#{file_name}" ]; echo $?'").to_i == 0
             flag = true
             puts "File exists on #{@hostname}"

             display()

       else
              puts "File does not exist. Please answer following questions."
              prompt()
       end

     rescue => e
          puts "readFile1 failed... #{e}"
     end

     return exists

end

def prompt()
        puts "\nDo you want to enter the new file location? [y/n]"
        ans = gets.chomp
        puts "New location is #{ans}"
end

当我调用readFile方法时,如果文件不存在,则会打印Do you want to enter the new file location? [y/n]并且不会等待用户输入值但会立即打印rescue块并且退出。以下是输出if文件不存在。

Checking if file exists on LNXAPP
File does not exist. Please answer following questions.
Do you want to enter the new file location? [y/n]
readFile1 failed... No such file or directory - LNXAPP

我希望用户输入问题的值但是没有发生。需要帮助解决这个问题。

1 个答案:

答案 0 :(得分:0)

您的代码并不理想。

您应该通过以下方式检查文件是否存在:

if File.exist? location_of_your_file_goes_here

然后不需要开始/救援,因为 你已经检查过该文件是否存在。

另外两个空格应该比一个标签更好, 至少当你在像这里这样的网站上展示时。

原因很简单 - 它使您的代码更容易 为别人读书。

如果我是,你也不需要flag变量 对 - 尝试省略它并仅使用File.exist? 那里。

你也写道:

“当我调用readFile方法时”

但你没有名为readFile()的方法。

您的方法称为readFile1()。

我知道你也可能知道这一点,但是 你必须非常具体,以便红宝石 解析器准确理解你的意思, 你用文字描述的也是 匹配您使用的代码。

我在您的代码中看到的另一个问题是 你这样做:

return exists

但这里有什么“存在”?一个变量? 一个方法?它没有在其他地方定义 在你的代码中。

尝试使您的代码变得简单和合乎逻辑 尽可能。