在Ruby中编写以下代码的最简洁方法是什么?
if ($string eq "dasff1") { print "dasff1" ;print " hoiff1" }
elsif ($string eq "dasff2") { print "dasff2" ;print " hoiff2" }
elsif ($string eq "dasff3") { print "dasff3" ;print " hoiff3" }
即单个行上的多个语句符合条件。
除了
之外还有其他方法吗?if (string == "dasff1")
print "dasff1" ;print " hoiff1"
elsif (string == "dasff2")
print "dasff2" ;print " hoiff2"
elsif (string == "dasff3")
print "dasff3" ;print " hoiff3"
end
答案 0 :(得分:1)
最简洁的方法是定义一个映射表,因为你正在进行直接匹配:
remap = {
"dasff1" => "hoiff1",
"dasff2" => "hoiff2",
"dasff3" => "hoiff3"
}
if (remapped = remap[string])
puts [ string, remapped ].join(' ')
end
由于这里有一个模式,你也可以这样做:
if (string.match(/\Adasff(\d+)/)
puts [ string, 'hoiff%s' % $1 ]
end
从样式的角度来看,尽量避免使用;
将多行Ruby代码连接在一起。它会造成很多混乱。
答案 1 :(得分:1)
您可以使用:
string = "dasff1"
case string
when "dasff1" then print "dasff1"; print " hoiff1"
when "dasff2" then print "dasff2"; print " hoiff2"
when "dasff3" then print "dasff3"; print " hoiff3"
end
或者只是:
print string+" "+string.sub('das','hoi') if string=~/^dasff[1-3]$/
你不应该这样做,但是因为你要求它:
if string == "dasff1" then print "dasff1" ; print " hoiff1"
elsif string == "dasff2" then print "dasff2" ; print " hoiff2"
elsif string == "dasff3" then print "dasff3" ; print " hoiff3"
end
答案 2 :(得分:0)
鉴于
h = { "dasff1"=>"hoiff1", "dasff2"=>"hoiff2", "dasff3"=>"hoiff3" }
使用默认值等于空字符串计算另一个哈希:
g = h.each_with_object(Hash.new('')) { |(k,v),g| g[k] = "%s %s" % [k,v] }
#=> {"dasff1"=>"dasff1 hoiff1", "dasff2"=>"dasff2 hoiff2", "dasff3"=>"dasff3 hoiff3"}
确认默认值:
g["cat"]
#=> ""
然后
def pr_str(str, g)
print g[str]
end
print "|"; pr_str("dasff1", g); print "|"
# |dasff1 hoiff1|
print "|"; pr_str("dasff2", g); print "|"
# |dasff2 hoiff2|
print "|"; pr_str("dasff3", g); print "|"
# |dasff3 hoiff3|
print "|"; pr_str("catsup", g); print "|"
# ||
打印|
个字符以标记返回的每个字符串的开头和结尾。请注意print ''
(与puts ''
相对)不执行任何操作。