如果没有参数,请做一些事情

时间:2014-07-26 17:34:26

标签: 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
    end
end

mac(ARGV[0])

我想要做的是如果没有指定参数,则打印第二个变量。相反,我得到一个ArgumentError。显然,我只是缺少一种更简单的方式。

1 个答案:

答案 0 :(得分:4)

如果您希望能够在没有任何参数的情况下调用该函数,则需要将其定义更改为不需要参数。一种方法是为参数赋予默认值。然后你可以检查一下,例如,

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])