字符串中字符的条件语句

时间:2014-09-15 00:07:32

标签: ruby string

我正在编写一个简单的调查,它收集用户输入并将其分配给类属性。一个属性是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"。我无法弄清楚为什么我的条件陈述不起作用。

2 个答案:

答案 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