gpt4 book ai didi

ruby - Ruby 中最简洁/优雅/合适的方法参数解析

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

认为已经有对此的答案,但找不到。我一直在以某种方式解析方法选项,并想检查并确保它是最优雅/最简洁的方式。

这是我通常做的:

def some_method *args
options = args.extract_options!
options.assert_valid_keys(:key1, :key2)
defaults = {:key1 => "one", :key2 => "two"}
options = defaults.merge(options)

general_arguments = args[0]

显然,这旨在让我可以进行如下方法调用:

some_method @user.id, :key1 => "good"

这行得通,但对于 Ruby 来说似乎有点冗长,而且由于这是我的“一般模式”,我想知道这是否真的是我应该这样做的方式。是否有更好、更简洁的方式或“更像 Rubyesque”的方式来进行一般选项解析?

假设

  • 积极的保护——我假设方法在通过 gem 或 gemmable 插件提供的公共(public) API 中
  • 需要默认值主要是为了查看其他人使用的模式
  • 可能接受了不止一个预散列非命名参数

最佳答案

我认为这真的取决于谁或什么将调用此方法。如果它是一个私有(private)方法,那么这绝对是大材小用,因为对它的所有调用都将被封装。另一方面,如果它是您发布的某个 gem 中公共(public) API 的一部分,那么我认为这种防御方法是合适的。

如果您的用例介于两者之间,您可能希望采用防御性较低但略显明确的方法。当一个方法是公共(public)的,但只有有限数量的调用者时,我倾向于遵循以下模式。它需要固定数量的“通用参数”和少量具有默认值的选项。

def my_method(id, options={})
# Set default options
options[:my_option] ||= "default option"

# rest of your method goes here
end

关于ruby - Ruby 中最简洁/优雅/合适的方法参数解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9649604/

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