Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 与if语句相比,对变量进行多次检查的数据结构更好?_Ruby On Rails_Ruby_Data Structures - Fatal编程技术网

Ruby on rails 与if语句相比,对变量进行多次检查的数据结构更好?

Ruby on rails 与if语句相比,对变量进行多次检查的数据结构更好?,ruby-on-rails,ruby,data-structures,Ruby On Rails,Ruby,Data Structures,所以,我有这段代码,是的,它看起来很难看。是否有更好的数据结构可以用来比较row.add、row.modify、row.delete和row.query与“Y”并调用get\u角色函数?请注意,这段代码在循环中运行,因此是“行” if row.add == "y" role_ids << get_role("c") end if row.modify == "y" role_ids << get_role("u")

所以,我有这段代码,是的,它看起来很难看。是否有更好的数据结构可以用来比较row.add、row.modify、row.delete和row.query与“Y”并调用get\u角色函数?请注意,这段代码在循环中运行,因此是“行”

    if row.add == "y"
      role_ids << get_role("c")  
    end
    if row.modify == "y"
      role_ids << get_role("u")
    end
    if row.delete == "y"
      role_ids << get_role("d")
    end
    if row.query == "y"
      role_ids << get_role("r")
    end
如果row.add==“y”
角色ID
角色ID更新

改为

operations = [row.add,row.modify,row.delete,row.query]
crud=["c","u","d","r"]
operations.each_with_index{|operation,i| if operation == "y" then role_ids << get_role(crud[i]) end}
operations=[row.add,row.modify,row.delete,row.query]
积垢=[“c”、“u”、“d”、“r”]
操作。每个带有{u索引的{u操作,i |如果操作==“y”,则角色{u id
operations={:add=>“c”,:modify=>“u”,:delete=>“d”,:query=>“r”}
操作。每个do |键、值|

角色ID总是会触发
get\u role(“y”)
。正确的跟踪,但不完全正确。感谢Jeriko的提醒。我认为现在更改的版本可以工作了。这个解决方案确实不可读。它还引入了额外的变量,需要创建更多的对象。当您调用
row.send(:method\u name)时
,这与调用
行.method\u name
相同。这是必需的,因为您的操作/方法名称存储在一个数组中(因为它们需要相应的值)。例如,
object.delete
object.send(:delete)
是相同的。这有助于解释吗?是的,我想,这就是我删除注释的原因。谢谢!这种技术称为动态分派。只是一个小小的注释:在1.9之前,Ruby的哈希没有排序,因此不能保证这里的每个
都会以定义的相同顺序遍历哈希。如果顺序很重要,就用一个应该使用数组数组(对)而不是散列,不需要更改所需的每个调用。
operations = [row.add,row.modify,row.delete,row.query]
crud=["c","u","d","r"]
operations.each_with_index{|operation,i| if operation == "y" then role_ids << get_role(crud[i]) end}
operations = { :add => "c", :modify => "u", :delete => "d", :query => "r" }
operations.each do |key,value|
  role_ids << get_role(value) if row.send(key) == "y"
end