2013-07-22 82 views
0

我确信已经提出了这个问题,但我无法通过我的初步搜索找到它。以字符串格式执行操作

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

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

回答

3

肯定不会,因为这不是你读代码的时候认准的事 - 这 - 变化的东西。

它混淆了意图,它掩盖了含义。


比较:

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

有:

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

如果你正在寻找,看看那里的序列号是从哪里来的,这是比较明显?

我可以差不多住的第一个版本,但我很可能会选择后者。我也可能做到这一点,而不是:

url = build_url(++request_sequence) 
+0

好的。谢谢你,但是,我需要在每次发出网络请求时增加一个整数,所以我想我会将增量放入URL路径创建中,而不是总是有一个额外的行。我猜它仍然很差,对吧? – RileyE

+0

@RileyE取决于;这与您提供的内容完全不同。我仍然不会这样做,因为它会以容易被忽略的方式重载字符串插值的语义。 –

+0

这是非常不同的,但你已经坚定地回答了我的问题,其他大多数情况。我想我只会创建将字符串初始化分开的习惯,并避免所有的混淆。谢谢。 – RileyE

2

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

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

然后,突然之间,你不能做你做了什么。所以在插值过程中的操作高度依赖于字符串中特定的语句,并且降低了代码的可维护性。

+1

+1,好点;它使得在各种情况下重构/重新排序更加困难。 –