ruby 没有从nil到整数的隐式转换(TypeError):我如何跳过这个错误?

fdbelqdn  于 2022-12-22  发布在  Ruby
关注(0)|答案(1)|浏览(167)

我正在编写一个与GSM可能的折扣和订户关系有关的程序。如果给定的电话号码在订户数组中,则它也具有可能的折扣状态...如果为真,则它可以具有折扣,否则它不能(假)。如果电话号码碰巧不在订户数组中,则程序应该停止,仅显示最后一条给定消息:"状态:无效"

subscribers = %w[5553457867 5417890987 5524567867 5356789865 5321234567 5546754321 5389876543]

starred_customer = [true, false, true, true, false, false, true]

def telephone_no_to_customer_index(subscribers, telephone_no) 
  subscribers.find_index do |number|
    telephone_no == number 
  end 
end

def starred_customer?(starred_customer, customer_index)  
  x = starred_customer[customer_index]
  if x == true
    puts "DISCOUNT: POSSIBLE"
  elsif x == false
    puts "DISCOUNT: IMPOSSIBLE"
  end
end

telephone_no = gets.chomp 
state = telephone_no_to_customer_index(subscribers, telephone_no)

state ? (puts "STATUS: VALID") : (puts "STATUS: INVALID")  #should i write here && (return)? 

customer_index = telephone_no_to_customer_index(subscribers, telephone_no)

discount_state = starred_customer?(starred_customer, customer_index)
puts discount_state

一旦输入的电话号码不在subscriber数组中,程序将跳过所有其他操作,因为程序没有停止,它将"nil"作为参数传递给第二个方法,而第二个方法不能将折扣状态应用于nil,因此它给出了一个错误:没有从nil到整数的隐式转换(TypeError):
我想从程序中得到的只是返回"STATUS:如果telephone_no不是订户数组的元素,则停止。

pbgvytdp

pbgvytdp1#

如果你想在某种情况下退出程序,你可以这样做。

if not state
  puts "STATUS: INVALID"
  exit 
end

puts "STATUS: VALID"

customer_index = telephone_no_to_customer_index(subscribers, telephone_no)

discount_state = starred_customer?(starred_customer, customer_index)
puts discount_state

您也可以使用unless

unless state
  puts "STATUS: INVALID"
  exit 
end

相关问题