【发布时间】:2023-03-08 09:45:01
【问题描述】:
我正在使用测试方法在我正在制作的 cli 工具中对方法进行建模,以便单独处理该方法。这是一个非常简单的方法,我试图让它尽可能简单。我设法将方法简化为:
LOGS = [{ "first_log" => ["first task"] }, { "second_log" => ["second task"] }, { "third_log" => ["third task", "additional task"] }]
LOG_NAME = "second_log"
def output
LOGS.each { |log|
if LOG_NAME
puts "-#{log.keys.first.to_s}:", " Tasks: #{log.values.join(",")}" if log.key?(LOG_NAME)
else
puts "-#{log.keys.first.to_s}:", " Tasks: #{log.values.join(",")}"
end
}
end
这里的目的是,当调用函数时,如果存在 LOG_NAME,它只会输出该日志(哈希对象)及其任务。如果不存在 LOG_NAME,它将输出 LOGS 数组中的所有日志(哈希对象)。
这很好用,但我的问题是:有没有办法让这个方法更简单?我觉得我可以摆脱 if/else 逻辑并更加简化它,但我无法想象如何。我也尝试过使用 rubocop,但它 1) 建议类似的 if/else 逻辑 2) 建议实际上不输出任何内容的更正。
任何想法都非常感谢,谢谢。
【问题讨论】:
-
你的
LOGS常量对我来说似乎很奇怪。将其定义为Hash,而不是Array是否更有意义,例如:LOGS = {"first_log" => ["first task"], "second_log" => ["second task"], ... }? -
我也对
LOG_NAMEconstant 感到有些困惑。为什么它是一个常量? -
这些都只是我在实际 cli 工具中使用的对象建模的一种方式。