我不明白为什么这种方法不起作用。当我输入一个应该传递if语句的值时,它不起作用。
def getBase
puts "What is the base URL for the test?"
x = gets
if (x.include? 'http://') && ((x.split('.').at(x.split('.').length - 1).length) == 3)
return x
else
puts "That is in the incorrect format."
puts "Please format your url like this"
puts "http://example.com"
getBase
end
end
输入'http://test.com'
result:语句重复并且不退出递归
答案 0 :(得分:2)
当您获得gets
的输入时,它会在最后包含换行符\n
(来自用户点击返回)。因此,x
实际上是"http://test.com\n"
。
要摆脱这种使用String#chomp
:
x = gets.chomp
应该这样做。
答案 1 :(得分:1)
如果目的是强制使用正确的URL格式和/或确保它是HTTP URL,为什么不使用专门设计的工具呢? Ruby的URI课程是你的朋友:
require 'uri'
URI.parse('http://foo.bar').is_a?(URI::HTTP)
=> true
URI.parse('ftp://foo.bar').is_a?(URI::HTTP)
=> false
URI.parse('file://foo.bar').is_a?(URI::HTTP)
=> false
URI.parse('foo.bar').is_a?(URI::HTTP)
=> false
我会更像这样编写代码:
require 'uri'
def get_base
loop do
puts "What is the base URL for the test?"
x = gets.chomp
begin
uri = URI.parse(x)
return uri.to_s if uri.is_a?(URI::HTTP)
rescue URI::InvalidURIError
end
puts "That is in the incorrect format."
puts "Please format your URL like this:"
puts
puts " http://example.com"
end
end
puts "Got: #{ get_base() }"