Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:转义字符串字符_Ruby - Fatal编程技术网

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
'
等时,更喜欢单引号字符串。”要点是:为了一致性,当你不需要的时候不要使用双引号字符串。你当场就把它钉好了,再次感谢你。你可能还想看看和。这帮了大忙,我知道这真的是一件美观的事情。我对每一个小细节都很仔细。谢谢