Rubocop 进攻:使用条件的返回值进行变量赋值和比较

cgu*_*guy 2 ruby rubocop

我的 Rubocop 进攻告诉我我需要“使用条件的返回值进行变量赋值和比较”

当我尝试修复它时,它让我又一次冒犯了我的“方法线太长”。

我试过重构为另一种方法,但我的代码坏了。

如何缩短或重构此代码?

HSH = { 'a' => 'z', 'b' => 'y', 'c' => 'x', 'd' => 'w', 'e' => 'v', \
        'f' => 'u', 'g' => 't', 'h' => 's', \
        'i' => 'r', 'j' => 'q', 'k' => 'p', 'l' => 'o', 'm' => 'n' }.freeze


def encoder(str)
  encoded_string = ''
  str.chars.each do |char|
    encoded_string = if HSH.key?(char) then encoded_string += HSH[char]
                     elsif HSH.invert.key?(char) then encoded_string += HSH.invert[char]
                     else encoded_string += char
                     end
  end
  encoded_string
end
Run Code Online (Sandbox Code Playgroud)

当我运行我的测试套件时,一切正常。

但是rubocop进攻给了我方法线太长了。

ste*_*lag 5

没有哈希:

ALPHABET = ("a".."z").to_a.join

def encoder(str)
  str.tr(ALPHABET, ALPHABET.reverse)
end
Run Code Online (Sandbox Code Playgroud)