Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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_Nested_String Interpolation_Rubocop_Ruby 2.7 - Fatal编程技术网

ruby:嵌套字符串插值的变通方法

ruby:嵌套字符串插值的变通方法,ruby,nested,string-interpolation,rubocop,ruby-2.7,Ruby,Nested,String Interpolation,Rubocop,Ruby 2.7,串连 {x?x.to_s+'is':}好的,Rubocop的样式/字符串连接建议避免使用+。 但这需要嵌套字符串插值 {x?{x.to_s}是:}好的, 至少在Ruby 2.7中没有扩展:{x.to_s}与任何其他文字一样处理 +版本可以吗?因为它处于样式指南可以覆盖的边缘,还是必须引入一个临时变量 tmp = x ? '#{x.to_s} is ' : '' "#{tmp}ok" 上下文:字符串被发送到日志文件。ok实际上是一长串的细节。x值得记录,但只有当它存在时才

串连 {x?x.to_s+'is':}好的,Rubocop的样式/字符串连接建议避免使用+。 但这需要嵌套字符串插值 {x?{x.to_s}是:}好的, 至少在Ruby 2.7中没有扩展:{x.to_s}与任何其他文字一样处理

+版本可以吗?因为它处于样式指南可以覆盖的边缘,还是必须引入一个临时变量

tmp = x ? '#{x.to_s}  is '  : ''
"#{tmp}ok"

上下文:字符串被发送到日志文件。ok实际上是一长串的细节。x值得记录,但只有当它存在时才值得记录。

是的,变量将使其更易于读取:

前缀={x}是如果x {prefix}好的
这取决于nilto_s==

是的,变量将使其更具可读性:

前缀={x}是如果x {prefix}好的
这取决于nilto_s==

的事实,因为ok实际上是:

…具有更多插值的长字符串。复制那根线不是干的

我会和你一起去

ok = generate_some_long_string()
ok.prepend("#{x} is ") if x
ok
这确实会发生变异,但根据我对这个问题的理解,这实际上可能是可取的

嵌套插值

作为旁白,我不推荐它,因为它很难阅读,但嵌套插值是完全有效的

x="val"
"#{x ? "#{x} is " : ""}ok"
#=> "val is ok"
这是因为插值闭包内的内容与任何其他ruby代码一样处理。内部双引号打开并关闭一个新字符串,而不是关闭第一个字符串并打开另一个字符串,因为插值闭包正在等待关闭的大括号。从技术上讲,你可以在任何深度做这件事

"#{x ? "#{"the #{y = x}ue of"} #{x} is " : ""}#{y.inspect}"
#=> "the value of val is \"val\""

鉴于ok实际上是:

…具有更多插值的长字符串。复制那根线不是干的

我会和你一起去

ok = generate_some_long_string()
ok.prepend("#{x} is ") if x
ok
这确实会发生变异,但根据我对这个问题的理解,这实际上可能是可取的

嵌套插值

作为旁白,我不推荐它,因为它很难阅读,但嵌套插值是完全有效的

x="val"
"#{x ? "#{x} is " : ""}ok"
#=> "val is ok"
这是因为插值闭包内的内容与任何其他ruby代码一样处理。内部双引号打开并关闭一个新字符串,而不是关闭第一个字符串并打开另一个字符串,因为插值闭包正在等待关闭的大括号。从技术上讲,你可以在任何深度做这件事

"#{x ? "#{"the #{y = x}ue of"} #{x} is " : ""}#{y.inspect}"
#=> "the value of val is \"val\""

我宁愿用x?{x} 好的,这样的话就可以了。漂亮的人字拖!但是,与此MWE不同,我实际的“ok”是一个包含更多插值的长字符串。复制那个字符串不是干的。你能给出一个更完整的例子吗?也许有一种更干净、更面向对象的方法。此外,我很好奇你想做什么-Robocop是否只是想让您编写s1,平衡效率和可读性?我倾向于编写x?{x} is:我宁愿用x?{x} 好的,这样的话就可以了。漂亮的人字拖!但是,与此MWE不同,我实际的“ok”是一个包含更多插值的长字符串。复制那个字符串不是干的。你能给出一个更完整的例子吗?也许有一种更干净、更面向对象的方法。此外,我很好奇你想做什么-Robocop是否只是想让您编写s1,平衡效率和可读性?我倾向于编写x?{x} is:如果我必须阅读代码,这是我希望遇到的,而不是插入和附加字符串中的三元。如果我必须阅读代码,这是我希望遇到的,而不是插入和附加字符串中的三元。