Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby内置函数在.rb文件中不起作用_Ruby - Fatal编程技术网

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

ruby内置函数在.rb文件中不起作用,ruby,Ruby,我不确定为什么我的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 "**

我不确定为什么我的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>'
fetch_value方法返回字符串,而不是数组。正如错误所说,String类没有join方法

如果您想将字符串作为数组处理(本质上是将其作为ruby代码进行计算),那么可以始终使用eval。请注意,在任何实际代码中,对用户输入的字符串使用eval都是相当危险的,因为您的代码将愉快地运行用户提供的任何内容

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

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

你可能还需要考虑如何处理数组。目前,您正在将其元素组合成一个字符串,然后将该字符串拆分回一个数组,这没有多大意义。而且,由于您的示例也使用嵌套数组,所以join和split tango可能并没有达到您所认为的效果。

如果必须,请不要执行“清除”之类的操作,而是调用系统“清除”。如果要创建交互式界面,请使用.join获取数组并将其转换为字符串。这里你已经有一个字符串了。您需要重新评估您的策略。join.split与.split.join不同…ruby代码不工作不清楚。您希望您的代码做什么?会发生什么?是否有错误消息?上面说什么?
def fetch_value
  puts "Please enter an array: "
  eval(gets.chomp)
end