这些'拆分'之间的区别使用

时间:2017-06-13 09:50:40

标签: ruby

我想了解这两个表达式之间的区别:

第一个有效:

def sum_difference_product
  a, b = gets.split.map { |num| num.to_i }
  puts a + b
  puts a - b
  puts a * b
end

def sum_difference_product
  a = gets.split.map { |e| e.to_i  }
  b = gets.split.map { |e| e.to_i  }
  puts a + b
  puts a - b
  puts a * b
end

返回:

NameError:

NoMethodError:
   undefined method `split' for nil:NilClass

2 个答案:

答案 0 :(得分:1)

第二个包含两个对gets的调用,它要求STDIN包含两行输入(不过你可以通过控制台中的用户输入或管道数据输入到脚本中)。如果没有,则会出错。

答案 1 :(得分:0)

第一

def sum_difference_product
  a , b = gets.split.map { |num| num.to_i }
  puts a + b
  puts a - b
  puts a * b
end

此处a, b = gets.split.map { |num| num.to_i }将获取标准条目,将任意空格字符拆分为数组,将每个元素转换为整数,并将其放入a和b中。

result =>如果在您的标准条目中输入22 12,则您的数组将为['22', '12'],然后在地图[22, 12]之后,然后a = 22b = 12

此时您可以进行操作。 a + b == 34这里

第二

def sum_difference_product
  a = gets.split.map { |e| e.to_i  }
  b = gets.split.map { |e| e.to_i  }
  puts a + b
  puts a - b
  puts a * b
end

在这里,gets.split.map { |e| e.to_i }将返回一个数组,如果您的标准条目格式化为由空格分隔的数字

,则将其放入a中

b将等待第二个标准条目,并且也将是一个数组。 a + b将连接2个数组。

如果在第一种方法的标准条目中,您发送22 12,然后a == 22b == 12

如果您在第二种方法的第一次获取中发送相同的标准条目,则a == [22, 12]。如果你没有在第二种方法的第二次获取中发送任何数据,那么获取将返回nil,并且你不能在nil上调用split。这是你的错误。