是否可以在ruby中动态设置变量



我想知道,考虑到这些全局变量的存在以及其他函数可以访问这些全局变量,是否有可能告诉函数使用一个或另一个变量,而不需要重写大量代码。我必须使用全局变量,因为我在calabash传递变量方面有局限性(如果我错了,请纠正我)。我希望能够调用一个函数来获取信息,并将其填充到几个全局变量中的一个。希望是这样的:

def add_five(my_var)
   if my_var == "my_cats"
      use $my_cats for my_var_nickname
   elsif my_var == "my_dogs"
      use $my_dogs for my_var_nickname
   elsif my_var == "my_birds"
      use $my_birds for my_var_nickname
   end
   my_var_nickname = my_var_nickname + 5
end
$my_cats = 2
$my_dogs = 3
$my_birds = 3
add_five("my_cats")
$my_cats = 7
$my_dogs = 3
$my_birds = 3

谢谢你的帮助!

我认为使用全局变量有臭味…

无论如何,你可以尝试使用散列:

$animal_counts = {}
def add_five(animal_type)
  $animal_counts[animal_type] += 5
end
$animal_counts[:cats]  = 2
$animal_counts[:dogs]  = 3
$animal_counts[:birds] = 3
add_five(:cats)
$animal_counts[:cats]  # => 7
$animal_counts[:dogs]  # => 3
$animal_counts[:birds] # => 3

希望能有所帮助!

def record_as(stuff)
   variable_to_use = if stuff == "foo"
      $variableA
   elsif stuff == "bar"
      $variableB
   end
   #do stuff with variable_to_use
end

简单使用在您的ruby步骤文件中,定义一个类似的变量

$global_memory=""

在您的葫芦步骤中,可以放在另一个ruby步骤文件中。从查询中读取一些文本,并在运行时将其存储在该变量上。

Then I should memorize delivery time

在ruby步骤文件中定义的,比如这个

Then /^I should memorize delivery time$/ do
  srctext=query("label marked:'lblOrderTime'",:text).first
  srctext=srctext.to_s
  $global_memory.replace(srctext)
end

稍后在场景中,您可以调用该值并像这样使用

Then I should see order dispatch time same as in checkout screen and receipt screen

在ruby步骤文件中定义的,比如这个

Then /^I should see order dispatch time same as in checkout screen and receipt screen$/ do |arg|
  datetext=$global_memory
    result = query("webView css:'SPAN' index:5").first["textContent"].include? "#{datetext}"
    unless result
      textFound = query("webView css:'TABLE' index:0").first["textContent"]
      screenshot_and_raise "time  #{datetext} not found instead #{textFound} is found"
    end 
end

此外,您可以使用Hash(键值对)同时存储多个变量并检索它们。

相关内容

  • 没有找到相关文章

最新更新