Ruby 如果没有争论,就做点什么
这是我写的一个小测试脚本:Ruby 如果没有争论,就做点什么,ruby,Ruby,这是我写的一个小测试脚本: #!/usr/bin/env ruby require 'packetfu' def mac(host) if host rmac = PacketFu::Utils.arp(host, :iface => 'wlan0') puts rmac else whoami = PacketFu::Utils.whoami?(:iface => 'wlan0') puts whoami
#!/usr/bin/env ruby
require 'packetfu'
def mac(host)
if host
rmac = PacketFu::Utils.arp(host, :iface => 'wlan0')
puts rmac
else
whoami = PacketFu::Utils.whoami?(:iface => 'wlan0')
puts whoami
end
end
mac(ARGV[0])
如果没有指定参数,我想让它打印第二个变量。相反,我得到了一个错误。显然,有一种更简单的方法我就是不知道。如果您希望能够在没有任何参数的情况下调用函数,则需要将其定义更改为不需要参数。一种方法是给参数一个默认值。然后你可以检查一下,例如
def mac(host = nil)
if host
puts "host: #{host}"
else
puts 'no host'
end
end
如果要区分未提供参数和使用默认值提供的参数,可以使用数量可变的参数:
def mac2(*args)
if args.empty?
puts "no arguments"
else
host = args[0]
end
end
另一方面,如果您的问题是检测ARGV
是否为空(即,没有给出命令行参数),那么您可以在上面检查。例如,如果给定参数,则仅调用mac
:
if ARGV.empty?
puts "Usage: …"
exit 1
end
mac(ARGV[0])
对不起,我应该说得更清楚些。您的代码几乎可以正常工作,但我特别遇到了这个错误:当我没有输入IP地址时,str不是有效的IPV4地址(ArgumentError)。请澄清。引发该异常的语句是什么?根据您发布的代码,即使您输入了ip地址,也必须发生相同的错误,这意味着您没有正确调用这些packetfu方法。@user3408678请注意,您的代码调用这两个
packetfu
方法时没有选中host
。您需要将调用移动到if host
的then分支或类似的分支,否则缺少的host
会导致错误…