以字符串格式执行操作

时间:2013-07-22 18:36:45

标签: ruby

我确信这已被问到,但我无法通过我的基本搜索找到它。

是否不鼓励在字符串初始化中执行操作?

  > increment = 4
 => 4 
  > "Incremented from #{increment} to #{increment += 1}"
 => "Incremented from 4 to 5"

2 个答案:

答案 0 :(得分:3)

肯定不会,因为那不是你在寻找事物的地方 - 在阅读代码时改变了事情。

它模糊了意图,它掩盖了意义。


比较

url = "#{BASE_URL}/#{++request_sequence}"

使用:

request_sequence += 1
url = "#{BASE_URL}/#{request_sequence}"

如果您想查看序列号的来源,哪个更明显?

几乎与第一个版本一起生活,但我可能会选择后者。我也可以这样做:

url = build_url(++request_sequence)

答案 1 :(得分:2)

在您的特定情况下,它可能没问题,但问题是变量上的操作应该发生的位置必须是字符串中同一变量的最后一个实例,并且您不能总是确定这一点。例如,假设(出于某些文体原因),您想要编写

"Incremented to #{...} from #{...}"

然后,突然之间,你无法做你所做的事。因此,在插值期间进行操作很大程度上取决于字符串中的特定字符,这会降低代码的可维护性。