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
会导致错误…