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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.