【问题标题】:Ruby: Escaping String CharactersRuby:转义字符串字符
【发布时间】: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/%Qhere documents

标签: ruby


【解决方案1】:

好吧,如果你真的真的想避免使用双引号,你可以在单引号之间插入一个文字换行符:

  expect(@calc.add('1
2,3')).to eq(6)

在我看来,这真的很丑陋。如果您想使用双引号独有的功能(即转义的换行符),那么为什么不只使用双引号呢?他们又不是邪恶的,也不是什么好东西,没什么好怕的:

expect(@calc.add("1\n2,3")).to eq(6)

此外,如果您不想这样做,则不必“将所有测试转换为使用双引号”。就个人而言,我的经验法则是尽可能使用单引号,并在需要时使用双引号。为工作使用正确的工具。


这是来自the Ruby style guide on GitHuba quote,这似乎同意我的观点:

  • 当您不需要字符串插值或\t\n' 等特殊符号时,首选单引号字符串。

【讨论】:

  • 这帮了很多忙,我知道这真的是一件很美的事情。我对每一个小细节都非常细致。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 2012-03-03
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-25
相关资源
最近更新 更多