Detectar argumento de função opcional (escalar)

8

Considere este script:

function alfa(bravo, charlie) {
  if (charlie)
    return "charlie good"
  else {
    return "charlie bad"
  }
}
BEGIN {
  print alfa(1, 1)
  print alfa(1, 0)
  print alfa(1, "")
  print alfa(1)
}

Resultado:

charlie good
charlie bad
charlie bad
charlie bad

O Awk tem uma maneira de saber quando um argumento não foi fornecido?

    
por Steven Penny 15.04.2017 / 20:39

2 respostas

6

Sim, você pode fazer isso:

function alfa(bravo, charlie) {  
  if (charlie) {
    return "charlie good"
  }
  if (charlie == 0 && charlie == "") {
    return "charlie not provided"
  }
  if (!charlie && charlie != 0) {
    return "charlie null"
  }
  if (!charlie && charlie != "") {
    return "charlie 0"
  }
}

Resultado:

charlie good
charlie 0
charlie null
charlie not provided
    
por 15.04.2017 / 21:10
5

awk não possui uma maneira interna de verificar se a variável foi inicializada. Você deve fazer você mesmo:

function alfa(bravo, charlie) {
  if (charlie == 0 && !length(charlie))
    return "charlie bad"
  else {
    return "charlie good"
  }
}
BEGIN {
  print alfa(1, 1)
  print alfa(1, 0)
  print alfa(1, "")
  print alfa(1)
}

A maneira geral:

var == 0 && !length(var)

Uma variável não inicializada e 0 faz com que var == 0 seja avaliado como verdadeiro, !length(var) exclui o caso quando var = 0 .

    
por 15.04.2017 / 21:26