你如何在 Ruby 中阅读这个三元条件?
Posted
技术标签:
【中文标题】你如何在 Ruby 中阅读这个三元条件?【英文标题】:How do you read this ternary condition in Ruby? 【发布时间】:2012-03-31 13:31:48 【问题描述】:我在一些代码中遇到了三元组,我无法理解条件:
str.split(/',\s*'/).map do |match|
match[0] == ?, ?
match : "some string"
end.join
我明白我在某些点拆分字符串并将总结果转换为数组,并依次处理数组的每个元素。除此之外,我不知道发生了什么。
【问题讨论】:
【参考方案1】:一种(稍微)不那么令人困惑的写法是:
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 和1.9 之间String#[]
的差异。
最终,条件只是检查match
中的第一个字符是否为,
,如果是,则保持值相同,否则将其设置为"some string"
。
【讨论】:
谢谢@AndrewMarshall,如果是match == ( ?, ) ? match : "some string"
会有所帮助吗?或者这意味着别的什么?
@IsmailTabtabai 那是一样的。每当我做三元语句时,我通常将整个条件语句括在括号中以明确它在哪里,但这只是风格。字符文字可能是 Ruby 中鲜为人知的语法结构之一,当您不知道它是什么时(尤其是与其他 ?
s 配对时)可能会非常混乱。
意思是一样的。那么 match[0] == ?, ?匹配:“一些字符串”以上是关于你如何在 Ruby 中阅读这个三元条件?的主要内容,如果未能解决你的问题,请参考以下文章