我试图编写一个代码,检查用户的输入是否留空或包含数字。另外,我收到.empty的错误?
in `block in <main>': undefined method `empty?' for nil:NilClass (NoMethodError)
这是我到目前为止所做的:
loop do
print "Please tell us your first name: "
first_name = gets.chomp.capitalize!
if first_name.empty? or first_name.nil?
puts "No input. Please tell us your first name:"
elsif first_name[0..-1].include?(0..9)
puts "Numbers are an unacceptable character."
puts "Please tell us your first name: "
else
break
end
end
如果此代码缓慢和/或冗长,我会感激提示改进。提前谢谢!
答案 0 :(得分:0)
(1)如果输入字段为空,则会返回nil
,因此您应首先检查nil
。
1.9.3-p547 :046 > first_name = gets.chomp.capitalize!
=> nil
1.9.3-p547 :047 > first_name
=> nil
1.9.3-p547 :048 > nil.empty?
NoMethodError: undefined method `empty?' for nil:NilClass
(2)为了确定名称是否包含数字,可以使用正则表达式。它具有良好的可扩展性。
1.9.3-p547 :053 > /[\d]/.match('jason123')
=> #<MatchData "1">
1.9.3-p547 :054 > /[\d]/.match('jason')
=> nil
/[\d]/
代表任意数字。如果名称没有号码,则会返回nil
。