gpt4 book ai didi

ruby-on-rails - 检查第一个方法是否返回 nil 并应用另一个方法的优雅方法

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:52 25 4
gpt4 key购买 nike

我有以下内容:

options = args.select{ |arg| arg.respond_to?(:keys) }.first.dup.keep_if {|k| filter_keys.include? k}

编辑

options = args.select{ |arg| arg.respond_to?(:keys) }.first.select {|k| filter_keys.include? k}

first 有时返回 nil 这使得 dup 引发异常。所以我想要一种优雅的方法来检查 first 在调用 dup 之前是否返回 nil

所以如果args如下:

[{:collection=>["abe", "<mus>", "hest"], :include_blank=>true}]

和filter_keys如下:

filter_keys = %w(include_blank required)

结果是:

{:include_blank=>true}

有时 args 会像:

[[["<Africa>", [["<South Africa>", "<sa>"], ["Somalia", "so"]]], ["Europe", [["Denmark", "dk"], ["Ireland", "ie"]]]]]

根本没有匹配项。

或者可能像:

[nil, {:collection=>["abe", "<mus>", "hest"], :prompt=>true, :include_blank=>true, :multiple => 'ss'}]

这也给出了

{:include_blank=>true}

我对此的试验如下:

if f = args.select{ |arg| arg.respond_to?(:keys) }.first
options = f.select {|k| filter_keys.include? k}
end

此代码应该过滤 args 数组以仅从其中的任何哈希中获取匹配的键。

但我认为这段代码既不简单也不优雅,因为它分配了一个新变量。

最佳答案

首先,我认为 args.select{ |arg| arg.respond_to?(:keys) }.first 可以写成 args.detect{ |arg| arg.respond_to?(:keys) .

我喜欢这样

arg = args.detect{|arg| arg.respond_to?(:keys) }
options = arg.select{|k| filter_keys.include? k} if arg

关于ruby-on-rails - 检查第一个方法是否返回 nil 并应用另一个方法的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32120556/

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