ruby注入方法作为参数
因此,我试图编写功能性ruby,为此需要在需要的地方注入lambdas。但事实证明,这并不是那么优雅和有用。例如:ruby注入方法作为参数,ruby,Ruby,因此,我试图编写功能性ruby,为此需要在需要的地方注入lambdas。但事实证明,这并不是那么优雅和有用。例如: def this_is_a_test(arg1, fn_one = self.default_fn_one, fn_two = self.default_fn_two) #Something here end 这有两个缺点: 如果我需要注入更多的方法,arity就会变得太大 如果我只想注入fn_-two,并为fn_-one使用默认值,那是不可能的 所以我尝试了这种方法(从ra
def this_is_a_test(arg1, fn_one = self.default_fn_one, fn_two = self.default_fn_two)
#Something here
end
这有两个缺点:
fn_-two
,并为fn_-one
使用默认值,那是不可能的这确实解决了这两个案例,但我想知道这是否是最好的方法?有没有一种方法可以在没有选项散列的情况下执行此操作?我认为您需要使用
方法和显式过程或lambda
构造。在Ruby 2.0中,还可以使用命名参数完全删除opts哈希。(如果您也希望针对Ruby的早期版本,请修改您的opts哈希方法。)
(未经测试,但方向正确。)我认为您需要使用方法和显式proc
或lambda
构造。在Ruby 2.0中,还可以使用命名参数完全删除opts哈希。(如果您也希望针对Ruby的早期版本,请修改您的opts哈希方法。)
(未经测试,但方向正确。)看起来您想将内容捆绑到对象中?如果只有一个函数作为参数,您可以使用块参数,但由于需要多个参数,这是没有帮助的。看起来您想将内容捆绑到对象中?如果只有一个函数作为参数,您可以使用一个块参数,但由于需要多个参数,这是没有帮助的。此外,您可以在this|u is_a_a_测试方法定义中使用*args并执行args。每个{arg |放置arg.call}
我还没有使用2.0,但这不会再次出现与我提到的相同的问题吗?如果args被命名(Ruby 2.0)或者在散列中传递,算术问题消失了。此外,您可以在this|is|u a|u测试方法定义中使用*args并执行args。每个{arg |放置arg.call}
我还没有使用2.0,但这不会再次出现与我提到的相同的问题吗?如果args被命名(Ruby 2.0)或以散列形式传递,算术问题消失了。
def this_is_a_test(arg1, options = {})
opts = {
fn_one: self.default_fn_one,
fn_two: self.default_fn_two
}.merge(options)
#Something here
end
def this_is_a_test(arg1,
fn_one: method(:default_fn_one),
fn_two: method(:default_fn_two))
puts fn_one.call
puts fn_two.call
yield if block_given? # allow to pass an optional block too
end
this_is_a_test(:foo, fn_one: lambda { :bar } do
puts :baz
end