我想了解这两个表达式之间的区别:
第一个有效:
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
答案 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 = 22
和b = 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 }
将返回一个数组,如果您的标准条目格式化为由空格分隔的数字
b将等待第二个标准条目,并且也将是一个数组。 a + b将连接2个数组。
如果在第一种方法的标准条目中,您发送22 12
,然后a == 22
和b == 12
。
如果您在第二种方法的第一次获取中发送相同的标准条目,则a == [22, 12]
。如果你没有在第二种方法的第二次获取中发送任何数据,那么获取将返回nil,并且你不能在nil上调用split。这是你的错误。