gpt4 book ai didi

ruby - 这个反引号 ruby 代码是什么意思?

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

while line = gets
next if line =~ /^\s*#/ # skip comments
break if line =~ /^END/ # stop at end

#substitute stuff in backticks and try again
redo if line.gsub!(/`(.*?)`/) { eval($1) }

结束

我不明白的是这一行:

line.gsub!(/`(.*?)`/) { eval($1) }
  1. gsub! 是做什么的?究竟是什么?
  2. 正则表达式(.*?)的含义
  3. block 的含义{eval($1)}

最佳答案

  1. 它将在 line 的匹配部分内替换 block 的结果。
  2. 它将匹配 0 个或多个先前的子表达式(即“.”,匹配任何一个字符)。 ? 修改 .* RE,使其匹配的内容不超过继续匹配后续 RE 元素所必需的内容。这被称为“非贪婪”。如果没有 ?.* 也可能匹配第二个反引号,具体取决于行的其余部分,然后整个表达式可能会失败。
  3. 该 block 返回反向引用的 eval(“评估 Ruby 表达式”)的结果,反向引用是反引号字符之间的字符串部分。这由 $1 指定,它指的是 RE 的第一个括号括起来的部分(“反向引用”)。

总的来说,所有这一切的结果是包含反引号括号表达式的行将反引号(和反引号)内的部分替换为执行包含的 Ruby 表达式的结果值。由于外部 block 受制于 redo,因此循环将立即重复,而无需重新运行 while 条件。这意味着生成的表达式也受到反引号评估的影响。

关于ruby - 这个反引号 ruby 代码是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1857749/

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