2016-12-01 52 views
1

在Ruby中编写以下代码的最简洁方法是什么?在条件为单行的情况下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

为什么这个问题标记为[tag:perl]? –

回答

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 
+1

我认为使用'then'关键字将条件表达式的条件部分与正文分开比使用分号更加通俗:if(string ==“dasff1”)then print“dasff1”;打印“hoiff1”'... –

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 

从风格的角度来看,尽量避免将多个l连接在一起Ruby代码使用;。它造成了很多混乱。

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 '')什么都不做。