Ruby中用于重构的Eval运算符

Ruby中用于重构的Eval运算符,ruby,selenium,assert,Ruby,Selenium,Assert,我们正在重构使用Ruby和Selenium编写的自动化脚本,并讨论了如何在Ruby中使用eval操作符来减少代码。这是我们所拥有的 我有一个方法“ValidateViewPageElements”,它是一个getter方法,从web ui获取所有值,并将其与xml数据存储库进行比较。我还编写了一个CustomAssertion类,它包含一个“verify\u browser\u element”方法,该方法接受实际值(web对象的值)和预期值,基本上执行assert应该执行的操作。如果值匹配,则

我们正在重构使用Ruby和Selenium编写的自动化脚本,并讨论了如何在Ruby中使用eval操作符来减少代码。这是我们所拥有的

我有一个方法“ValidateViewPageElements”,它是一个getter方法,从web ui获取所有值,并将其与xml数据存储库进行比较。我还编写了一个CustomAssertion类,它包含一个“verify\u browser\u element”方法,该方法接受实际值(web对象的值)和预期值,基本上执行assert应该执行的操作。如果值匹配,则记录成功,如果值不匹配,则记录错误

def validateViewPageElements()
  CustomAssertion.verify_browser_element_value(complete_field.exists?, false)
  CustomAssertion.verify_browser_element_value(editdarrecord_field.exists?, false)
  CustomAssertion.verify_browser_element_value(addvehicle_field.exists?, false)
end
重构上述代码的代码评审注释之一是使用eval表达式并执行如下操作以最小化代码

def validateViewPageElements()
  array = ["complete_field","editdarrecord_field","addvehicle_field"]
  for i in 0..array.length
    CustomAssertion.verify_browser_element_value(eval array[i].value, false)
  end
end
我读过几篇关于使用eval语句及其缺点的文章,但在上述情况下是否需要使用eval语句。我不使用上述重构的建议如下。Eval语句每次使用时都会创建一个新字节。2.它并没有向开发人员明确定义该方法的目的。3.引入循环来最小化代码行不是很好。4.很难更改循环中的预期值,因为它们都必须相同

在上面的例子中,有没有其他理由可以避免eval,或者我的假设是错误的,在上面的例子中使用eval可以将15行断言代码减少到5行代码?请帮帮我

谢谢。

为什么不干脆:

def validateViewPageElements()
  [complete_field, editarrecord_field, addvehicle_field].each {|field| CustomAssertion.verify_browser_element_value(field.exists?, false)}  
end  
为什么不简单地:

def validateViewPageElements()
  [complete_field, editarrecord_field, addvehicle_field].each {|field| CustomAssertion.verify_browser_element_value(field.exists?, false)}  
end  
为什么不简单地:

def validateViewPageElements()
  [complete_field, editarrecord_field, addvehicle_field].each {|field| CustomAssertion.verify_browser_element_value(field.exists?, false)}  
end  
为什么不简单地:

def validateViewPageElements()
  [complete_field, editarrecord_field, addvehicle_field].each {|field| CustomAssertion.verify_browser_element_value(field.exists?, false)}  
end  

在Ruby中使用
for
循环是非常奇怪的,而使用
eval
来处理如此简单的事情让我怀疑你的评论者的理智。在Ruby中,通常使用迭代器而不是循环,并且可以使用而不是
eval

def validateViewPageElements()
  %w[complete_field editdarrecord_field addvehicle_field].each do |m|
    CustomAssertion.verify_browser_element_value(send(m).value, false)
  end
end

对于字符串数组,我也切换到了
%w[]
,这样就减少了引用噪音。

在Ruby中使用
for
循环是非常奇怪的,而使用
eval
来处理如此简单的事情让我怀疑你的审阅者是否明智。在Ruby中,通常使用迭代器而不是循环,并且可以使用而不是
eval

def validateViewPageElements()
  %w[complete_field editdarrecord_field addvehicle_field].each do |m|
    CustomAssertion.verify_browser_element_value(send(m).value, false)
  end
end

对于字符串数组,我也切换到了
%w[]
,这样就减少了引用噪音。

在Ruby中使用
for
循环是非常奇怪的,而使用
eval
来处理如此简单的事情让我怀疑你的审阅者是否明智。在Ruby中,通常使用迭代器而不是循环,并且可以使用而不是
eval

def validateViewPageElements()
  %w[complete_field editdarrecord_field addvehicle_field].each do |m|
    CustomAssertion.verify_browser_element_value(send(m).value, false)
  end
end

对于字符串数组,我也切换到了
%w[]
,这样就减少了引用噪音。

在Ruby中使用
for
循环是非常奇怪的,而使用
eval
来处理如此简单的事情让我怀疑你的审阅者是否明智。在Ruby中,通常使用迭代器而不是循环,并且可以使用而不是
eval

def validateViewPageElements()
  %w[complete_field editdarrecord_field addvehicle_field].each do |m|
    CustomAssertion.verify_browser_element_value(send(m).value, false)
  end
end

对于字符串数组,我也切换到了
%w[]
,这样可以减少引号噪声。

谢谢,这是一种在不使用Eval表达式的情况下减少所有断言期望值为false的行的方法。这里唯一需要注意的是,如果某个字段的预期值明天从false变为true,那么它将需要几个字段作为数组比较的一部分,而另一个字段是单独的断言。谢谢您知道一些避免Eval表达式的好理由吗?谢谢,这是一种在不使用Eval表达式的情况下将所有断言期望值的行减少为false的方法。这里唯一需要注意的是,如果某个字段的预期值明天从false变为true,那么它将需要几个字段作为数组比较的一部分,而另一个字段是单独的断言。谢谢您知道一些避免Eval表达式的好理由吗?谢谢,这是一种在不使用Eval表达式的情况下将所有断言期望值的行减少为false的方法。这里唯一需要注意的是,如果某个字段的预期值明天从false变为true,那么它将需要几个字段作为数组比较的一部分,而另一个字段是单独的断言。谢谢您知道一些避免Eval表达式的好理由吗?谢谢,这是一种在不使用Eval表达式的情况下将所有断言期望值的行减少为false的方法。这里唯一需要注意的是,如果某个字段的预期值明天从false变为true,那么它将需要几个字段作为数组比较的一部分,而另一个字段是单独的断言。谢谢你知道一些避免使用Eval表达式的好理由吗?