Ruby:转义字符串字符
在意识到我的测试失败的原因后,我想保留在不插值的情况下只使用单引号的想法。然而,在这种情况下,正因为如此,我的测试失败了。有没有一种方法可以不转义字符串Ruby:转义字符串字符,ruby,Ruby,在意识到我的测试失败的原因后,我想保留在不插值的情况下只使用单引号的想法。然而,在这种情况下,正因为如此,我的测试失败了。有没有一种方法可以不转义字符串'1\n,2,3',而不必将我的所有测试转换为使用双引号 我的代码如下: 规格: describe '#add' do before(:each) do @calc = StringCalculator.new end context 'when given a delimiter' do it 'should su
'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
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
Calc.rb:
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
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
如果你真的想避免使用双引号,你可以在单引号之间插入一个文字换行符:
expect(@calc.add('1
2,3')).to eq(6)
在我看来,这真的很难看。如果您想使用双引号特有的功能(即转义换行符),那么为什么不使用双引号呢?这并不是说他们是邪恶的或什么的,没什么可怕的:
expect(@calc.add("1\n2,3")).to eq(6)
此外,如果不想,您不必“将所有测试转换为使用双引号”。就个人而言,我的经验法则是在可能的时候使用单引号,在需要的时候使用双引号。使用正确的工具进行作业
以下是我的观点:
- 当您不需要字符串插值或特殊符号(如
、\t
、\n
等)时,请选择单引号字符串'
如果您需要特殊字符,那么为什么首先要使用单引号?这就是双引号的意思,对吗?正如你所发现的,它们不只是用于插值。我不想要转义字符,@Ajedi32我只是觉得会有某种方法。我的意思是,大多数rubyists在不尝试插值时更喜欢使用单引号。好吧,规则是这样说的:“当你不需要字符串插值或特殊符号,如
\t
,\n
,'
等时,更喜欢单引号字符串。”要点是:为了一致性,当你不需要的时候不要使用双引号字符串。你当场就把它钉好了,再次感谢你。你可能还想看看和。这帮了大忙,我知道这真的是一件美观的事情。我对每一个小细节都很仔细。谢谢