0

我想知道在 Ruby 中调用了多少返回参数 method_missing 。我想根据它应该产生多少返回参数来改变函数的行为。我正在寻找与nargoutMatlab 等效的东西。本例中的 XXX:

class Test
  def method_missing(method_id, *args)
    n_return_arguments = XXX
    if n_return_arguments == 1
      return 5
    else
      return 10, 20
    end
  end
end

t = Test.new.missing_method # t should now be 5

t1, t2 = Test.new.missing_method # t1 should now be 10 and t2 should now be 20
4

2 回答 2

0

因为如果有多个参数,args变量将是一个。Array我们可以直接查看退货。如果是数组,它会响应大小,如果不是,它可能不会。我们可以使用类或检查它来获取我们需要的信息。

class Test
  def method_missing(method_id, *args)
    n_return_arguments = XXX
    if n_return_arguments == 1
      return 5
    else
      return 10, 20
    end
  end
end

XXX = "anything but 1"
t = Test.new.this_nonexistent_method # => 5
puts "t = #{t.inspect}"

XXX = 1
t1, t2 = Test.new.this_nonexistent_method.size # => 2
puts "t1 = #{t1.inspect}, t2 = #{t2.inspect}"

使用 XXX 值来更改方法的行为。

返回值总是一个值,有时是一个包含 1 个以上元素的数组。

于 2012-11-18T21:31:29.733 回答
0

Ruby 中没有多重返回值。方法总是只返回一个值。再也不会了。永远不会少。

于 2012-11-19T01:48:43.110 回答