Ruby获取函数不会多次接受空行

时间:2008-12-02 01:10:43

标签: ruby komodo

我正在尝试编写一个简单的ruby函数,它可以提示用户输入值,如果用户自己按下ENTER,则使用默认值。 在下面的示例中,第一次调用Prompt函数可以通过按Enter键来处理,并使用默认值。但是,第二次我调用Prompt并按ENTER键时,没有任何反应,事实证明我必须在ENTER之前按下其他一些字符才能从'gets'调用返回。

必须有一些方法来刷新输入缓冲区以避免此问题。谁知道该怎么办?

谢谢,

大卫

def BlankString(aString)
   return (aString == nil) ||
          (aString.strip.length == 0)
end


#Display a message and accept the input
def Prompt(aMessage, defaultReponse = "")
   found = false
   result = ""
   showDefault = BlankString(defaultReponse) ? "" : "(#{defaultReponse})"
   while not found
      puts "#{aMessage}#{showDefault}"
      result = gets.chomp
      result.strip!
      found = result.length > 0
      if !found
         then if !BlankString(showDefault)
                 then
                    result = defaultReponse
                    found = true
              end
      end
   end

   return result
end


foo = Prompt("Prompt>", "sdfsdf")
puts foo

foo = Prompt("Prompt>", "default")
puts foo

4 个答案:

答案 0 :(得分:1)

这在技术上不是一个答案,但无论如何它会帮助你:使用Highline(http://highline.rubyforge.org/),如果你正在制作一个命令行交互式界面,它会给你带来很多麻烦此

答案 1 :(得分:1)

我尝试了你的代码(在Windows下),它似乎工作正常。 您使用的操作系统是什么?

答案 2 :(得分:0)

我还尝试使用ruby 1.8.6的代码(在OSX下),它运行良好:

:! ruby prompt.rb
Prompt>(sdfsdf)

sdfsdf
Prompt>(default)

default

运行以下内容后会得到什么?

c = gets
b = gets
a = gets
p [ a, b, c ]

我只是点击'输入'3x并获得

["\n", "\n", "\n"]

我猜你错误的是你在你的while语句中输入了一个无限循环,而不是传递defaultResponse(在某些代码中,你实际上已经运行了不在你的例子中)。 / p>

答案 3 :(得分:0)

我已经确认(通过在Komodo之外运行程序),问题实际上只发生在Komodo内部。我感谢大家的反馈,并花时间进行独立测试(我没有考虑过),以帮助缩小问题范围。