如何在ruby语法中将字符串分成两行

时间:2016-03-30 16:46:36

标签: ruby string xpath

如何在ruby代码中将字符串分成两行? 有特定的符号吗?

def my_def
  path = "//div/p[contains(., 'This is a veeeeeeeryyyyyy looooonggggg string')]"
end

我希望做出类似的事情:

def my_def
  path = "//div/p[contains(., 'This is a veeeeeeeryyyyyy
          looooonggggg string')]"
end

enter image description here 反斜杠不能正常工作!

2 个答案:

答案 0 :(得分:5)

Ruby会自动连接两个相邻的字符串:

foo = 'a' 'b'
foo  # => "ab"

通常,行尾表示作业的结束:

foo = 'a'
      'b'
foo  # => "a"

所以你不能简单地打破界限并期望Ruby找出要做的事情。

\标记该行为继续,因此您可以使用:

foo = "a" \
      "b"
foo # => "ab"

或者,依赖+字符串连接:

foo = 'a' +
      'b'
foo # => "ab"

我可能会使用+,因为它最常用于连接字符串,所以它的含义非常明显。使用\会导致人们加入非常长的表达式,而不是将其分解。

如果你的字符串真的很长,你可以使用其他一些技巧:

foo = [
  'foo',
  'bar'
].join
foo  # => "foobar"

如果要使用空格连接字符串,例如重新组合句子:

foo = [
  'foo',
  'bar'
].join(' ')
foo  # => "foo bar"

或:

foo = [
  'foo',
  'bar'
] * ' '
foo  # => "foo bar"

在所有这些基础上,我会使用上面的一些组合或仅仅是:

long_str = 'This is a veeeeeeeryyyyyy' +
           ' looooonggggg string'
path = "//div/p[contains(., '#{ long_str }')]"

或:

long_str = [
  'This is a veeeeeeeryyyyyy',
  'looooonggggg string'
].join(' ')
path = "//div/p[contains(., '%s')]" % long_str

答案 1 :(得分:3)

您可以使用反斜杠指示字符串在下一行继续,如下所示:

str = "this is a long \
string"

print str # => this is a long string

如果你的字符串变得太大,那么在这里使用docs可能是个好主意。它们允许您在代码中间编写文本片段:

str = <<HEREDOC
This is my string :)
Let's imbue code in the imbued doc: #{[4, 2, 3, 1].sort}
HEREDOC

print str
# => This is my string :)
# => Let's imbue code in the imbued doc: [1, 2, 3, 4]

HEREDOC可以是您想要的任何名称。您可以详细了解here docs here