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

时间:2014-10-22 19:31:35

标签: ruby variables dynamic global-variables calabash

我想知道是否有可能,因为这些全局变量存在并被其他函数访问,以告诉函数使用一个或另一个变量而不重写大量代码。我必须使用全局变量,因为我对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

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我认为使用全局变量有一种难闻的气味......

无论如何,您可以尝试使用hash

$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

希望有所帮助!

答案 1 :(得分:0)

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

   #do stuff with variable_to_use
end

答案 2 :(得分:0)

简单使用 在你的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

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