【发布时间】:2014-03-17 15:06:22
【问题描述】:
在意识到我的测试失败的原因之后,我想保留在不插值时只使用单引号的想法。然而,在这种情况下,正因为如此,我的测试失败了。有没有办法不转义字符串 '1\n,2,3' 而不必将我的所有测试都转换为使用双引号?
我的代码如下:
规格:
describe '#add' do
before(:each) do
@calc = StringCalculator.new
end
context 'when given a delimiter' do
it 'should support newlines' do
expect(@calc.add('1\n2,3')).to eq(6)
end
end
end
Calc.rb:
class StringCalculator
attr_reader :numbers
def initialize(numbers = '')
@numbers = numbers
end
def add(expression)
@numbers.concat(expression)
@numbers.gsub!(/\n/, ',')
@numbers.empty? ? 0 : result
end
def result
@numbers.split(',').map(&:to_i).reduce(:+)
end
end
【问题讨论】:
-
如果你需要特殊字符,那你为什么要使用单引号呢?这就是双引号的用途,对吧?正如您所发现的,它们不仅仅用于插值。
-
我不想要转义字符,@Ajedi32 我只是想会有某种方式。我的意思是,大多数红宝石学家在不尝试插入值时更喜欢使用单引号。
-
好吧,Ruby style guide 是这样说的:“当您不需要字符串插值或特殊符号(例如
\t、\n、'等)时,首选单引号字符串。 "重点是:为了保持一致性,不要在不需要双引号的字符串时使用它们。 -
你当场搞定了,再次感谢。
-
那个,你可能还想看看%q/%Q和here documents。
标签: ruby