我正在编写一个简单的调查,它收集用户输入并将其分配给类属性。一个属性是gender
。我想将用户输入分成一个数组,取第一个字母,然后决定性别是男性还是女性。例如,如果输入字符串以"f"
(女性)或"g"
(女孩)或"w"
(女性)开头,则性别属性应返回"her"
这是我得到的:
puts "What is #{responder.fname}'s' gender?"
len = [gets.chomp]
responder.gender =
if len[0] == "f" or len[0] =="w" or len[0] =="g"
responder.gender = "her"
elsif len[1] = "u" #<= for "gUy"
responder.gender = "his"
else
responder.gender = "his"
end
无论条件测试如何,该属性都会继续返回"his"
。我无法弄清楚为什么我的条件陈述不起作用。
答案 0 :(得分:0)
通过回忆Ruby中的每个表达式返回一个值,您可以大大简化代码。鉴于您已经拥有一个具有性别的setter方法的Responder对象,例如:
require 'ostruct'
responder = OpenStruct.new
您可以匹配每个响应的第一个字符并返回相应的字符串。例如:
responder.gender = case gets.downcase.chomp
when /^f/ then 'female'
when /^m/ then 'male'
else 'other'
end
还有其他方法可以做到这一点,但这对我来说似乎清晰明了,并清楚地传达了代码的意图。您的里程可能会有所不同。
答案 1 :(得分:0)
我发现了另一个解决方案,它是Ruby v1.9.1 +附带的内置方法。此方法称为'start_with'
。通过获取字符串"foo"
的第一个字符并将其与传递的参数("f")
进行比较,它完全符合我的需要。这是它的样子:
x = "foo"
if x.start_with?("f")
puts "match"
else
puts "bar"
end