0

dot我有一个循环,每次重复时应该将变量的所指对象从句点更改为空格:

dot = (dot == ".") ? " " : "."

这很好用,但对我来说它不像正确的 Ruby。看起来这应该是一个单行语句。我想知道是否有更类似于 Ruby 的方式来实现这一点。我愿意以不同的方式循环完成此任务;或许gsub可以做到。

4

3 回答 3

2
dot = [' ', '.'].cycle
  #=> #<Enumerator: [" ", "."]:cycle>

dot.next #=> " "
dot.next #=> "."
dot.next #=> " "
dot.next #=> "."
于 2014-10-20T07:20:36.597 回答
1

如果您的循环是标准形式之一,您可以使用 #with_index 或其变体:

objects.each_with_index do |element, index|
   separator = index.even? ? "." : " "
   ... do something with element and separator
end

这使得意图明确,这通常胜过聪明的编码。

于 2014-10-20T06:58:36.957 回答
1

怎么样:

dot.gsub(/[\. ]/, '.' => ' ', ' ' => '.')

意思是:

查找.orspace并替换为spaceand.

于 2014-10-20T06:02:44.000 回答