gpt4 book ai didi

ruby - 如何在 Ruby 中获取对包含用于调用的参数的方法的引用?

转载 作者:数据小太阳 更新时间:2023-10-29 08:29:30 24 4
gpt4 key购买 nike

给定这段代码:

a = {1=>2}
m = a.method(:[])

我知道我现在可以使用:

value = m.call(1)

它会返回 2。问题是,我需要更改什么才能直接调用该方法:

m.call()

它会将 1 作为参数发送吗?如果能写出类似这样的东西就好了:

m = a.method(:[],1) # where the symbol is the method, and 1 will be the parameter it will be called with

问题是,我想延迟执行脚本的某些部分,直到创建某些对象,并且我想避免重写所有内容以使用 lambda。

最佳答案

基本上,您想要的是一种柯里化(Currying)函数的方法。

http://en.wikipedia.org/wiki/Curry_function

这可以通过许多不同的方式完成,其中之一:

def curry(method, *params)
lambda { send method, *params }
end

您可以将它添加到 Hash 的元类中,或者添加到您想要包含在某些对象中的模块中,等等。然后,调用它就变成了您想要的用例:

irb(main):001:0> a = {1 => 2}
=> {1=>2}
... # add curry to Hash's metaclass
irb(main):011:0> m = a.curry :[], 1
=> #<Proc:0xb76e2154@(irb):8>
irb(main):012:0> m.call
=> 2

关于ruby - 如何在 Ruby 中获取对包含用于调用的参数的方法的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1708265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com