Ruby-正确处理空对象
在ruby中,我不太确定如何处理对象是否为零 例如,我有以下几点:Ruby-正确处理空对象,ruby,exception,object,Ruby,Exception,Object,在ruby中,我不太确定如何处理对象是否为零 例如,我有以下几点: begin sp = SerialPort.new(@serial_device, @serial_bps, @serial_par, @serial_bits, SerialPort::NONE) tcp = TCPSocket.new(@host, @port) if (sp) sp.print(command) sp.close elsif
begin
sp = SerialPort.new(@serial_device, @serial_bps, @serial_par, @serial_bits, SerialPort::NONE)
tcp = TCPSocket.new(@host, @port)
if (sp)
sp.print(command)
sp.close
elsif
tcp.print(command)
tcp.close
end
say siri_output
rescue
pp $!
puts "Sorry, I encountered an error: #{$!}"
ensure
request_completed
end
问题是第一个对象返回一个与以下内容相关的错误:
没有到主机的路由-连接(2)
这是正确的,因为TCP没有连接到duh。所以我希望它使用下一个对象
有没有一种方法可以在不使用某些异常的情况下执行此操作,我想知道是否有更好的方法来执行我所追求的任何操作。问题不在于检查,你做得对。任何不是零或假的东西在ruby中都是真的。当您在以“sp=…”开头的行上获得异常时,执行跳转到resque块。您应该像这样重新构造代码(我删除了surever子句,因为我不知道它做什么)。这样做的一件好事是在它自己的行中拯救每一种特定类型的异常。按类名,例如NoConnectivityException=>e(或异常的类是什么) 对于快速和草率的编程,您可以做另一件事,但不建议这样做,而且通常调试起来很痛苦,因为任何错误都会导致零,并且会被静音
sp = SerialPort.new(@serial_device, @serial_bps, @serial_par, @serial_bits, SerialPort::NONE) rescue nil
tcp = TCPSocket.new(@host, @port) rescue nil
这样,sp变量中的SerialPort对象或nil对象将结束,sp也是如此。难道您不能使用函数检查该对象的可用性,然后建立连接吗?obj.nil?-ruby检查对象是否为nil
的方法确保
的结构与Java或C#中的类似。是的,我知道。我只是不明白这个条款在这里有什么意义,如果你有一个拯救所有例外,那么你可以把它放在整个开始/拯救的事情之外。只有当您重新引用异常或某些异常可能会漏掉时,才需要这样做。另外,“请求_完成”是做什么的?网络设备是如何连接到“siri_输出”的。
sp = SerialPort.new(@serial_device, @serial_bps, @serial_par, @serial_bits, SerialPort::NONE) rescue nil
tcp = TCPSocket.new(@host, @port) rescue nil