我是一个Ruby新手 我怎样才能为这个功能写得更好?我可以使用哈希表吗。
def readable_status(status)
if status == "1"
return "go"
end
if status == "2"
return "stop"
end
if status == "3"
return "die"
end
end
答案 0 :(得分:8)
如果您想使用哈希(根据您的问题),您可以这样做:
def readable_status(status)
readable = { "1" => "go", "2" => "stop", "3" => "die" }
readable[status] || "default value"
end
答案 1 :(得分:6)
怎么样
def readable_status(status)
%w{go stop die}[status.to_i - 1]
end
答案 2 :(得分:5)
当然,只需使用
def readable_status(status)
m = {'1' => 'go', '2' => 'stop', '3' => 'die'}
m[status]
end
如果您愿意,可以使其成为oneliner:
...
{'1' => 'go', '2' => 'stop', '3' => 'die'}[status]
答案 3 :(得分:5)
由于给出了一些欠优化的规范(意思是:在开发过程中业务改变了规范),我在这个问题上尝试使用Hash-es失败了。
哈希是好的,直到你需要写一些比单个值更复杂的东西。如果您需要将这些单个值更改为方法,则必须重写所有内容,因为Hashes通过调用方法的值来获取方法的值 定义哈希时。如果稍后方法的返回值发生变化,则不会更改散列。
它仍然是可读的英语: - )
def readable_status(status)
case status
when "1" then "go" end
when "2" then "stop" end
when "3" then "die" end
end
end
答案 4 :(得分:1)
如果在方法内定义了散列,则每次调用方法时都会重新创建散列(及其中的每个字符串)。定义常量可以防止这种情况;正如@Phrogz所说,使用一种方法来访问值可以保持灵活性。
READABLE_STATUS_TABLE = {'1'=>'go', '2'=>'stop', '3'=>'die'}
def readable_status(status)
READABLE_STATUS_TABLE[status]
end