gpt4 book ai didi

ruby - 使用 Ruby 的 p 方法打印字符串时出现额外的转义字符

转载 作者:数据小太阳 更新时间:2023-10-29 08:49:41 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的函数来对 ruby​​ 中的任意文本执行字符串插值。我还希望该函数不评估转义插值 block ,以便“\#{foo}”将转换为“#{foo}”而不是评估。

当我传递带有转义 block 的表达式时,当我使用 puts 方法时该值显示正确,但当我使用 p 时包含转义字符。我不明白为什么。

这是我的代码:

def evil_mark text
part = text.partition(/[^\\]\#{.*?}/)
return_string = part[0]
until part[1] == ""
return_string << eval("\"" + part[1] + "\"")
part = evil_mark(part[2]).partition(/[^\\]\#{.*?}/)
return_string << part[0]
end
return_string.gsub!(/\\\#{.*?}/){|s| s[1..-1]}
return return_string
end

$foo = 'faz'
$bar = 'baz'

s = 'This is some \#{$foo} bar and some #{$bar} bat'

puts evil_mark s
#~> This is some #{$foo} bar and some baz bat

p evil_mark s
#~> "This is some \#{$foo} bar and some baz bat"

顺便说一句,我知道使用 eval 方法可能很危险。

最佳答案

返回没有问题。使用 #p 时它仍然出现转义的唯一原因是 p 打印字符串的方式基本上可以直接用作该字符串的 ruby​​ 代码。 - 也就是说 #p 有意添加转义符。

关于ruby - 使用 Ruby 的 p 方法打印字符串时出现额外的转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16325999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com