在嵌套函数中交换变量的适当解决方案(在ruby中)

时间:2013-04-26 15:46:26

标签: ruby function variables nested

我有几种基于step_1x变量的y方法。

step_2根据step_1 - 方法创建新方法,但不需要变量(只是通过)!

同样适用于step_3(基于step_2 - 方法)。

我的问题是我有大约20个step_2 - 方法,其中包含数十个step_1 - 方法(5种不同类型)。对于每一个我必须传递相同的两个变量。 我需要这种构造用于迭代目的。

现在,有没有办法在不使用全局变量的情况下直接将变量从step_3(x, y)移交给step_1 (x, y)

# example

def step_1 (x, y)
  return x + y
end

def step_2 (*foo)
  return step_1(*foo)
end

def step_3 (*foo)
    return step_2(*foo)
end

x, y = 2, 2 # example

puts step_3(x, y) # ==> 4

感谢您的任何建议

2 个答案:

答案 0 :(得分:3)

当我读到“我必须传递相同的两个变量”时,这自然会让人想到创建一个可以传递的简单容器的想法:

class NumberTuple
  attr_accessor :x
  attr_accessor :y

  def initialize(x, y)
    @x = x
    @y = y
  end
end

tuple = NumberTuple.new(2,2)
step_3(tuple)

这通常会得出结论:创建一个可以内化所有这种状态的简单计算类。这就是类实例擅长的:

class NumberCalculator
  def initialize(x, y)
    @x = x
    @y = y
  end

  def step_3
    step_2
  end

  def step_2
    step_1
  end

  def step_1
    @x + @y
  end
end

calculator = NumberCalculator.new(2,2)
calculator.step_3

答案 1 :(得分:0)

alias step_3 :step_1

或者如果你想要经过中间步骤,

alias step_2 :step_1
alias step_3 :step_2