我在这个例子中使用了三元运算符,它工作正常:
out = 'demo'.start_with?('No information provided') ? 'No information provided' : 'Confidential'
当我将此应用于<<
运算符时,我遇到了异常can't convert true into String
:
out << 'demo'.start_with?('No information provided') ? 'No information provided' : 'Confidential'
为什么会这样?
答案 0 :(得分:5)
<<
has higher precedence then ?
operator。
所以
out << 'demo'.start_with?('No information provided') ? 'No information provided' : 'Confidential'
实际上是
(out << 'demo'.start_with?('No information provided')) ? 'No information provided' : 'Confidential'
根据错误out
是字符串对象,String#<<
要求其参数也是字符串。但'demo'.start_with?('No information provided')
提供了一个true
对象,因此您得到错误'无法将true转换为字符串',因为有(out << true) ? .. : ..
之类的语句。
始终使用paren (..)
来避免此类优先问题。
out << ('demo'.start_with?('No information provided') ? 'No information provided' : 'Confidential')