gpt4 book ai didi

ruby - 只选择那些有值的可选命名参数的明智方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:54:52 28 4
gpt4 key购买 nike

我正在为某个第三方应用程序 A 构建客户端。我有许多方法接受一堆参数,其中一些是可选的。我正在使用命名参数:

def func1(a: nil, b:, c:, d:, e: nil)
# ...............

call_to_client_internal(a: a, b: b, c: c.....)
end

第三方应用不接受nil 的参数。也就是说,每个参数要么必须有一个值,要么不能被传递。

有没有办法检查传递给 func1 的可选参数是否有值,并且只传递这些参数进一步传递给 call_to_client_internal做?在这种情况下,可选的是 ae

最佳答案

如果您使用的是 Ruby 2.1 +,则有一种方法可以做到:

def foo(a: nil, b:nil, c: nil, d: nil, e: nil)
present_args = method(__method__).parameters.select { |arg| binding.local_variable_get(arg[1]) }
...
end

这个:

  • 使用method(:foo).parameters获取可用的参数
  • 使用 binding.local_variable_get(arg[1]) 获取它们的值
  • 根据需要选择这些使用,存储在 present_args 中(我相信你能想到一个更好的名字

因此,对于您的情况,我将其扩展为使用 reduce:

def func1(a: nil, b:nil, c: nil, d: nil, e: nil)
present_args_hash = method(__method__).parameters.reduce({}) do |hash, (_, arg)|
next hash unless (val = binding.local_variable_get(arg))
hash.merge(arg => val)
end
call_to_client_internal(present_args_hash)
end

这看起来是一种很好的直接方法 - 您只构建那些存在的关键字参数的散列,并将其发送给您的客户。

告诉我你过得怎么样!有任何问题,很乐意提供帮助。

关于ruby - 只选择那些有值的可选命名参数的明智方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48560049/

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