2011-01-03 2 views
4

해시에 데이터 묶음이 있는데 그 중 하나를 선택합니다. 때로는 선택할 데이터가 있고 때때로 그렇지 않을 수도 있습니다. 선택 연산자에 의해 발견 된 무언가가 언제 있었는지를 알 수있는 가장 좋은 방법은 무엇이며, 그렇지 않은 경우에는 내 코드에서 이에 반응 할 수 있습니까?KRL의 해시에서 비어있는 pick()을 감지합니다.

+2

에서 가져옵니다. 나는 전에 이것을 궁금해했다. –

답변

4

pick operator은 항상 결과를 배열로 반환하도록 두 번째 선택적 매개 변수를 사용합니다. 즉, 어떤 것이 선택되면 배열의 길이가 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; 
    } 
    } 
} 
관련 문제