Ruby 内置函数在 .rb 文件中不起作用



我不确定为什么我的 ruby 代码不起作用,任何建议或帮助将不胜感激。

有人可以建议我如何使这段代码工作:

result = fetch_value.join(',').split(',').map(&:to_i)

我在下面有一个名为codeit.rb的文件

# Function definitions first
def menu
  # Clear the screen, and present the user with a menu
  puts `clear`
  puts "***Flatten an Array***"
  puts "would you like to flatten an array?"
  print "(y)yes, (n)no, (q)quit: "
  gets.chomp.downcase
end
def flatten_array
  print "great! lets do this! "
  result = fetch_value.join(',').split(',').map(&:to_i)
  puts "the answer is #{result}"
  puts "press return to return to menu"
  gets
end #end of flatten_array method
def fetch_value
    puts "Please enter an array: "
    gets.chomp
end

# run the app...
response = menu 
while response != 'q'
  case response
  when 'y'
    flatten_array
  when 'n'
    advanced_calc
  end
  response = menu
end

在终端中运行此代码,我得到以下内容:

***Flatten an Array***
would you like to flatten an array?
(y)yes, (n)no, (q)quit: y
great! lets do this! Please enter an array: 
[[1, 2, [3]], 4]
codeit.rb:14:in `flatten_array': undefined method `join' for "[[1, 2, [3]], 4]":String (NoMethodError)
    from codeit.rb:35:in `<main>'

但是当在irb中运行类似的命令时,代码似乎有效:

2.3.0 :082 > array
 => [[1, 2, [3]], 4] 
2.3.0 :083 > 
2.3.0 :084 >   
2.3.0 :085 >   
2.3.0 :086 >   array.join(',').split(',').map(&:to_i)
 => [1, 2, 3, 4] 
2.3.0 :087 > 

fetch_value方法返回字符串,而不是数组。正如错误所说,String 类没有join方法。

如果你想把字符串当作一个数组——本质上是把它评估为红宝石代码——你可以总是使用eval。请注意,在任何实际代码中,对用户输入的字符串使用 eval 都是相当危险的,因为您的代码会愉快地运行用户提供给它的任何内容。

有了这个警告,你可以这样做:

def fetch_value
  puts "Please enter an array: "
  eval(gets.chomp)
end

您可能还需要考虑如何处理数组。目前,您将其元素组合成一个字符串,然后将该字符串拆分回数组,这没有多大意义。由于您的示例也使用嵌套数组,因此连接和拆分探戈可能没有像您认为的那样。

最新更新