使用所有变量名称加载函数。还有另外一种方法吗?

时间:2011-08-19 13:49:11

标签: ruby function

有更好的方法吗?

value = 10
train = []
storage = 12
another_var = 'apple'

def first_function(value, train, storage, another_var)
    second_function(train, storage)
    third_function(train, storage, another_var)
    forth_function(value, another_var)
end

def third_function(train, storage, another_var)
    puts  'x'
end

def second_function(train, storage)
    puts  'x'
end

def forth_function(value, another_var)
    puts  'x'
end

这是正确的方法吗?乘坐价值观?我正在通过LRTHW工作,我正在努力建立一个游戏。我遇到的问题是我有一个表示转弯的for循环,它充当游戏驱动程序。在for循环中,它调用函数然后调用更多函数。除非我将所有变量加载到第一个函数中,然后将它们传递给链条,否则它会断开。它有点整洁,它阻止你访问非常狭窄的范围之外的变量,但有没有办法可以覆盖它?

2 个答案:

答案 0 :(得分:1)

我相信你想要的是能够做所有可选参数的组合。

试试这个:

def myfunction(options={})
    options = {:value => 10, :train => [], :storage => 12, :another_var => 'apple'}.merge(options)
    puts options[:value]
    puts options[:train]
    puts options[:storage]
    puts options[:another_var]
end

使用示例:

irb(main):013:0> myfunction({})
10
12
apple
=> nil
irb(main):014:0> myfunction({:value => 11, :storage => 23})
11
23
apple
=> nil

答案 1 :(得分:1)

您可能希望使用实例变量将它们保留在范围内,而不必每次都将它们作为参数传递。

@value = 10
@train = []
@storage = 12
@another_var = 'apple'

def first_function
    second_function
    third_function
    fourth_function
end

def third_function
    puts  @another_var
end

def second_function
    puts  @value + @storage
end

def fourth_function
    puts  @train
end