3

我的项目可以是红色、黄色、绿色(比这更复杂)等几个属性之一,它们有相应的 is_red、is_yellow、is_green 布尔值。

我想要一个 api 函数来更改我传递的这个值,例如:

id: 12
type: red

在我的功能有:

item=Item.find(id)
if item.is_ + type == true
  item.is_ + type=false
end 

我该怎么做?

提前谢谢

4

2 回答 2

6

采用send

item = Item.find(id)

if item.send(:"is_#{type}") == true
  item.send(:"is_#{type}=", false)
end 
于 2012-10-02T00:59:41.753 回答
-1

不使用 Ruby 就不能动态地构建变量名eval,这会很脏,但是很实用。

您可以method_missing在 BlankSlate 对象上使用来捕获自由文本方法调用并将它们作为一个大的脏案例语句来处理。

最优雅的解决方案是哈希,因为键可以很容易地动态组合。

于 2012-10-02T05:39:36.747 回答