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