在单独的行上连接字符串的方法

时间:2018-01-10 18:39:04

标签: ruby string-literals

这会产生换行符:

%(https://api.foursquare.com/v2/venues/search
                          ?ll=80.914207,%2030.328466&radius=200
                          &v=20161201&m=foursquare&categoryId=4d4b7105d754a06374d81259
                          &intent=browse)

这会产生空格:

"https://api.foursquare.com/v2/venues/search
 ?ll=80.914207,%2030.328466&radius=200
 &v=20161201&m=foursquare&categoryId=4d4b7105d754a06374d81259
 &intent=browse"

这会产生一个字符串:

"https://api.foursquare.com/v2/venues/search"\
"?ll=80.914207,%2030.328466&radius=200"\
"&v=20161201&m=foursquare&categoryId=4d4b7105d754a06374d81259"\
"&intent=browse"

当我想在多行上分隔一个字符串以便在屏幕上更好地阅读时,是否首选使用转义字符?

我的IDE抱怨我应该使用单引号字符串而不是双引号字符串,因为没有插值。

2 个答案:

答案 0 :(得分:2)

通常你会把这样的东西放在一条线上,可读性会被诅咒,因为替代方案会有问题。没有办法声明忽略空格的字符串,但你可以这样做:

url = %w[ https://api.foursquare.com/v2/venues/search
  ?ll=80.914207,%2030.328466&radius=200
  &v=20161201&m=foursquare&categoryId=4d4b7105d754a06374d81259
  &intent=browse
].join

您明确删除空格的位置。

我实际建议通过正确编写此URI来避免这一切:

uri = url("https://api.foursquare.com/v2/venues/search",
  ll: [ 80.914207,30.328466 ],
  radius: 200,
  v: 20161201,
  m: 'foursquare',
  categoryId: '4d4b7105d754a06374d81259',
  intent: 'browse'
)

你有某种帮助函数,可以使用URI或其他工具对其进行正确编码。通过尽可能长时间地将参数保持为数据而不是编码字符串,可以更容易地发现错误并对其进行最后一次更改。

答案 1 :(得分:1)

@tadman的答案肯定表明了正确的方法;我会为了多样性而发布另一种方法:

query = "https://api.foursquare.com/v2/venues/search"
        "?ll=80.914207,%2030.328466&radius=200"
        "&v=20161201&m=foursquare&categoryId=4d4b7105d754a06374d81259"
        "&intent=browse"

是的,没有任何可见的连接,连续一行引用4个字符串。此示例在irb / pry中不起作用(由于它具有REPL性质),但上面是最有效的方法,用于连接ruby中的字符串而不生成任何中间字符串结果

pry / irb中测试的受控示例:

value = "a" "b" "c" "d"