【问题标题】:ruby - how to pass on incoming named params to another method in one expression?ruby - 如何在一个表达式中将传入的命名参数传递给另一种方法?
【发布时间】:2014-01-23 00:05:34
【问题描述】:

我有一个方法:

def move_knight(orig_x,orig_y,offset_x,offset_y)
  if valid_knight_move(offset_x,offset_y)
    move('knight',orig_x,orig_y,offset_x,offset_y)
  end
end

它有效。我现在想重构对 move 的调用,并在对 move 的调用中一次性传递最后 4 个参数,如

move('knight',*args)

但我明白了

<NameError: undefined local variable or method `args' for #<ChessGame:0x000...>>

我看到的所有示例在调用方法参数中都有*args,而我没有。

【问题讨论】:

    标签: ruby methods parameters parameter-passing


    【解决方案1】:

    我会这样做:

    def move_knight(*args)
      if valid_knight_move(*args.last(2))
        move('knight',*args)
      end
    end
    

    【讨论】:

      【解决方案2】:

      把方法定义改成如下:

      def move_knight(*args)
        if valid_knight_move(args[2],args[3])
          move('knight',*args)
        end
      end
      

      【讨论】:

      • +1 也是一种有用的方法。该位置的不同被指定为固定的[2][3],而不是last(2)。适用于某些情况/偏好。我喜欢 Arup 的 last(2) 方法以满足我的需求,但 +1 这个答案。
      猜你喜欢
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 2014-01-05
      • 2015-06-09
      • 2011-06-08
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多