Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 作为参数的ruby-pass方法_Ruby On Rails_Ruby_Ruby On Rails 3_Methods_Parameters - Fatal编程技术网

Ruby on rails 作为参数的ruby-pass方法

Ruby on rails 作为参数的ruby-pass方法,ruby-on-rails,ruby,ruby-on-rails-3,methods,parameters,Ruby On Rails,Ruby,Ruby On Rails 3,Methods,Parameters,我试图将一个方法作为参数传递给方法2,执行此方法并返回结果: def method_2( method_p, param ) res = method(method_p).call(param) return res end def method_1 klass = MyKlass.instance return method_2( klass.foo, "test" ) end 这是MyKlass文件: class MyKlass def foo(param)

我试图将一个方法作为参数传递给方法2,执行此方法并返回结果:

def method_2( method_p, param )
  res = method(method_p).call(param)
  return res
end

def method_1
  klass = MyKlass.instance
  return method_2( klass.foo, "test" )
end
这是MyKlass文件:

class MyKlass
  def foo(param)
    param+param
  end
end
我得到的只是一个错误

wrong number of arguments (0 for 1)
当您:

return method_2( klass.foo, "test" )

klass.foo需要一个参数,这可能是导致错误的原因。

您可以使用符号来引用方法:

def method_2(method_symbol, *args)
  send method_symbol, *args
end
但是,由于要对特定对象调用该方法,因此必须将其作为附加参数传入,或者使用proc或lambda,这类似于包装在对象中的块:

def method_2(proc, *args)
  proc.call(*args)
end

method_2(->(param){ klass.foo(param) }, "test")
更常见的做法是仅使用块来执行此操作:

def method_2(receiver, *args, &block)
  yield receiver, *args
end

method_2(klass, "test") do |receiver, param|
  receiver.foo(param)
end
所有这些都是相当做作的例子;你有没有想解决的具体问题