Phát hiện đối số chức năng tùy chọn (vô hướng)


8

Hãy xem xét kịch bản này:

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

Kết quả:

charlie good
charlie bad
charlie bad
charlie bad

Awk có cách nào để biết khi nào một đối số chưa được cung cấp không?

Câu trả lời:


6

Vâng, bạn có thể làm điều này:

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"
  }
}

Kết quả:

charlie good
charlie 0
charlie null
charlie not provided

6

awkkhông có cách dựng sẵn để kiểm tra biến đã được khởi tạo. Bạn phải tự làm điều đó:

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

Cách chung:

var == 0 && !length(var)

Một biến chưa được khởi tạo và 0 nguyên nhân var == 0được đánh giá là đúng, !length(var)loại trừ trường hợp khi var = 0.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.