我在某些代码中遇到了三元组,我无法理解条件:
str.split(/',\s*'/).map do |match|
match[0] == ?, ?
match : "some string"
end.join
我知道我在某些点分割字符串并将总结果转换为数组,并依次处理数组的每个元素。除此之外,我不知道发生了什么。
答案 0 :(得分:7)
写一个(稍微)不那么混乱的方式是:
str.split(/',\s*'/).map do |match|
if match[0] == ?,
match
else
"some string"
end
end.join
我认为多行三元语句很糟糕,特别是因为if
块可以在Ruby中返回。
这里最令人困惑的可能是?,
这是一个字符文字。在Ruby 1.8中,这意味着字符的ASCII值(在本例中为44
),在Ruby 1.9中,这只是一个字符串(在本例中为","
)。
使用字符文字而不仅仅是","
的原因是在Ruby 1.9中更改了对字符串调用[]
的返回值。 In 1.8 it returned the ASCII value of the character at that position,in 1.9 it returns a single-character string。在这里使用?,
可以避免担心Ruby 1.8和&之间的String#[]
之间的差异。 1.9。
最终,条件只是检查match
中的第一个字符是否为,
,如果是,则保持值相同,否则将其设置为"some string"
。