gpt4 book ai didi

ruby - 当我尝试时,书中的 Metaprogramming Ruby 2 示例不起作用。故障排除协助

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

在阅读 Metaprogramming Ruby 2 的一章时,我遇到了书中的一个示例,当我执行代码时它似乎不起作用。

array_explorer.rb

def explore_array(method)
code = "['a','b','c'].#{method}"
puts "Evaluating: #{code}"
eval code
end

loop { p explore_array(gets()) }

上面的代码旨在说明 eval 的强大功能。在下一个示例中,本书将教授代码注入(inject)的主要缺陷,并像这样重构代码以维护:

array_explorer.rb

def explore_array(method, *arguments)
['a','b','c'].send(method, *arguments)
end

loop { p explore_array(gets()) }

当我尝试运行上面的代码时,无论我尝试放入什么数组方法,文件总是给我这个错误。

array_explorer.rb:2:in `explore_array': undefined method `:size (NoMethodError)
' for ["a", "b", "c"]:Array

我已经尝试删除 *arguments 部分以减少它。我尝试使用一个字符串作为输入,一个符号作为输入,等等。这段代码由于某种原因不起作用。有谁知道为什么吗?

最佳答案

getsSTDIN 中读取一行; “行”定义为以换行符 (\n) 结尾的字符串。因此,您正在尝试调用不存在的方法 "size\n"。使用 chomp 去除换行符:

loop { p explore_array(gets.chomp) }

在第一个示例中没有关系,因为您正在评估代码 ['a', 'b', 'c'].size\n",它仍然有效。

关于ruby - 当我尝试时,书中的 Metaprogramming Ruby 2 示例不起作用。故障排除协助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29980160/

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