"not" 和 "!" 有什么区别?在 Ruby 除了优先级?

What is the difference beetwen "not" and "!" in Ruby except the precedence?

我已经在 Ruby 上写了一个小练习。它来自 this 课程。它将字符串中的字符移动到 n 位置。根据我使用的 !not 关键字,我在此处 if !char =~/\W/ 的代码中得到不同的结果。 在第一种情况下它根本不改变字符串,在第二种情况下它改变了。我不明白为什么。我的 Ruby 版本是 2.2。这是我的代码:

def caesar_ciper(string, shift_factor)
    new_word = ""
    string = string.split(//)   #splits to char array
    string.each do |char|
        shift_factor.times do
            if !char =~/\W/ #char has to be a "word" character ONLY
                if char === "Z" #if it is last character go to first one
                    char = "A"
                elsif char === "z"
                    char = "a"
                else
                char = char.next #shift character
                end         
            end

        end
        new_word<<char
    end
    new_word
end

p caesar_ciper("What a 9 string!", 5)

更新。我发现这对我来说效果更好 if char =~/\w/ and char=~/\D/,但我仍然无法解释 not! 的区别。

您已经自己回答了这个问题:区别在于优先级。

Ruby 阅读

if !char =~/\W/

作为

if (!char) =~/\W/

显然不是真的。

其中:

if not char =~/\W/

被解释为

if !(char =~/\W/)