写一个更好的开关盒功能?

时间:2012-04-02 10:57:56

标签: ruby

我是一个Ruby新手 我怎样才能为这个功能写得更好?我可以使用哈希表吗。

def readable_status(status)
  if status == "1" 
    return "go"
  end
  if status == "2"
    return "stop"
  end
  if status == "3"
    return "die"
  end
end

5 个答案:

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