"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/)
我已经在 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/)