Style/ConditionalAssignment:使用条件的return进行变量赋值和比较
Style/ConditionalAssignment: Use the return of the conditional for variable assignment and comparison
下面是我在 Rails 上的 Ruby 代码 -
inactive_list = [1,2,3,4,5]
raw_data = []
data = {
name: "Test",
full_name: "Test data"
}
if inactive_list.include? <<id of data>>
data[:active] = false
else
data[:active] = true
end
raw_data << data
我收到 if...else 语句的 Rubocop linting 错误。我尝试进行多项更改,但无法修复 linting Rubocop 错误。
C: Style/ConditionalAssignment: Use the return of the conditional for variable assignment and comparison.
而不是
if inactive_list.include? <<id of data>>
data[:active] = false
else
data[:active] = true
end
你可以写
data[:active] = !inactive_list.include? <<id of data>>
或者当你使用 Rails 时,你可以使用 exclude?
而不是 include?
的否定:
data[:active] = inactive_list.exclude? <<id of data>>
完整示例:
data = {
name: "Test",
full_name: "Test data",
active: inactive_list.exclude?(<<id of data>>)
}
一般来说,Style/ConditionalAssignment
rubocop 规则 (cop) 要求您更改这 2 个重复分配:
if condition
variable = value1
else
variable = value2
end
单个条件赋值:
variable = if condition
value1
else
value2
end
在你的例子中,最小的 Rubocop 需要的改变是改变这个:
if inactive_list.include? <<id of data>>
data[:active] = false
else
data[:active] = true
end
至:
data[:active] = if inactive_list.include? <<id of data>>
false
else
true
end
请参阅@spickermann 的回答以获得更短和更优雅的进一步更改,这是可能的,因为 include?
returns true
或 false
,恰好是你需要什么任务。所以你不需要在这里显式分配 true
或 false
,只需使用 !
取反即可,这是一种常见的编程习惯用法:
data[:active] = !inactive_list.include? <<id of data>>
另请参见:
数组include?
方法:https://ruby-doc.org/core-2.7.0/Array.html#method-i-include-3F
RuboCop::Cop::Style::ConditionalAssignment
: https://www.rubydoc.info/github/bbatsov/RuboCop/RuboCop/Cop/Style/ConditionalAssignment
检查if和case语句,其中每个分支都用于赋值给同一个变量,当使用条件的return时可以代替
下面是我在 Rails 上的 Ruby 代码 -
inactive_list = [1,2,3,4,5]
raw_data = []
data = {
name: "Test",
full_name: "Test data"
}
if inactive_list.include? <<id of data>>
data[:active] = false
else
data[:active] = true
end
raw_data << data
我收到 if...else 语句的 Rubocop linting 错误。我尝试进行多项更改,但无法修复 linting Rubocop 错误。
C: Style/ConditionalAssignment: Use the return of the conditional for variable assignment and comparison.
而不是
if inactive_list.include? <<id of data>>
data[:active] = false
else
data[:active] = true
end
你可以写
data[:active] = !inactive_list.include? <<id of data>>
或者当你使用 Rails 时,你可以使用 exclude?
而不是 include?
的否定:
data[:active] = inactive_list.exclude? <<id of data>>
完整示例:
data = {
name: "Test",
full_name: "Test data",
active: inactive_list.exclude?(<<id of data>>)
}
一般来说,Style/ConditionalAssignment
rubocop 规则 (cop) 要求您更改这 2 个重复分配:
if condition
variable = value1
else
variable = value2
end
单个条件赋值:
variable = if condition
value1
else
value2
end
在你的例子中,最小的 Rubocop 需要的改变是改变这个:
if inactive_list.include? <<id of data>>
data[:active] = false
else
data[:active] = true
end
至:
data[:active] = if inactive_list.include? <<id of data>>
false
else
true
end
请参阅@spickermann 的回答以获得更短和更优雅的进一步更改,这是可能的,因为 include?
returns true
或 false
,恰好是你需要什么任务。所以你不需要在这里显式分配 true
或 false
,只需使用 !
取反即可,这是一种常见的编程习惯用法:
data[:active] = !inactive_list.include? <<id of data>>
另请参见:
数组include?
方法:https://ruby-doc.org/core-2.7.0/Array.html#method-i-include-3F
RuboCop::Cop::Style::ConditionalAssignment
: https://www.rubydoc.info/github/bbatsov/RuboCop/RuboCop/Cop/Style/ConditionalAssignment
检查if和case语句,其中每个分支都用于赋值给同一个变量,当使用条件的return时可以代替