【发布时间】:2020-06-20 06:32:45
【问题描述】:
我正在用 Ruby 练习以下问题。 https://leetcode.com/problems/defanging-an-ip-address/
我发现我需要在我的三元运算符中添加一个括号才能获得与具有 if/else 条件的等效代码行相同的结果。这是为什么 ?
# @param {String} address
# @return {String}
def defang_i_paddr(address)
return address if address.isEmpty?
result_from_ternary = ''
result_from_if = ''
address.each_char do |letter|
# Why do I need parentheses here ?
result_from_ternary << (letter == '.' ? '[.]' : letter)
# Why dont I need parentheses here ?
result_from_if << if letter == '.'
'[.]'
else
letter
end
end
result_from_ternary = ''
end
【问题讨论】:
-
@knut 解释了为什么需要括号,但您需要关注的不仅仅是那些。假设
letter = '.'、res = ''你执行:res << (letter == '.' ? (String.new 'cat') : (String.new 'dog')) #=> "cat"。没问题,但如果你执行res << (letter == '.' ? String.new 'cat' : (String.new 'dog')),你会得到...syntax error, unexpected ':', expecting ')'...。同样,res << (letter == '.' ? (String.new 'cat') : String.new 'dog')会引发语法异常。 This article 可能感兴趣。 -
虽然括号在 Ruby 中是可选的,但在尝试指示解释器或编译器理解代码的操作顺序时,它们很重要,就像在所有其他语言中一样。在进行代码审查时,我总是强调这一点,因为依靠解释器或编译器来正确处理它是有风险的,尤其是在凌晨 3 点,当你有点宿醉并处理其他人编写的代码时。 “始终编写代码,就好像最终维护您的代码的人将是一个知道您住在哪里的暴力精神病患者。代码可读性。” — 约翰·伍兹
标签: ruby string conditional-operator