有更好的方法吗?
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循环中,它调用函数然后调用更多函数。除非我将所有变量加载到第一个函数中,然后将它们传递给链条,否则它会断开。它有点整洁,它阻止你访问非常狭窄的范围之外的变量,但有没有办法可以覆盖它?
答案 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