Обнаружить пустой выбор () из хэша в KRL - PullRequest
4 голосов
/ 04 января 2011

У меня есть куча данных в хэше, и я выбираю из них.Иногда там будут данные для выбора, а иногда нет.Каков наилучший способ узнать, когда оператором выбора было обнаружено что-то, а когда этого не было, чтобы я мог реагировать на это в своем коде?

1 Ответ

4 голосов
/ 04 января 2011

Оператор выбора примет второй необязательный параметр, который сделает его так, чтобы он всегда возвращал результаты в массиве. Это означает, что если что-то выбрано, длина массива будет больше 0, в противном случае она будет равна 0. Затем вы можете использовать это для выполнения того, что вы хотите сделать.

Пример кода / приложения взят из http://kynetxappaday.wordpress.com/2011/01/04/day-30-detecting-empty-pick/

ruleset a60x526 {
  meta {
    name "hash-pick-detect"
    description <<
      hash-pick-detect
    >>
    author "Mike Grace"
    logging on
  }

  global {
    dataHash = {
      "one": {
        "name": "Mike"
      }, // number
      "two": {
        "random": 8
      }, // number
      "three": {
        "name": "Alex"
      } // number

    }; // dataHash

  } // global

  rule detect_the_pick {
    select when pageview ".*"
    foreach dataHash setting (key, value)
    pre {
      userName = value.pick("$.name", true);
      length = userName.length();
    }
    if (length > 0) then {
      notify("Key: #{key}","Name: #{userName}<br/>Length: #{length}") with sticky = true;
    }
    notfired {
      raise explicit event empty_pick
        with pickedKey = key;
    }
  }

  rule empty_pick_found {
    select when explicit empty_pick
    pre {
      pickedKey = event:param("pickedKey");
      results =<<
        Key: #{pickedKey}<br/>
        doesn't have a name associated with it to pick from
      >>; //' fixing syntax highlighting
    }
    {
      notify("An empty pick was detected",results) with sticky = true;
    }
  }
}
...