2012-07-28 2 views
3

Ruby C API에서 심볼 평등을 테스트하는 방법을 찾고 있습니다. 예상대로이 방법이 작동하지 않는,보기의 루비 관점에서Ruby C API를 사용하여 심볼의 평등성 테스트

static VALUE test_symbol_equality(VALUE self, VALUE symbol) { 
    if (rb_intern("test") == symbol) { 
    return Qtrue; 
    } else { 
    return Qfalse; 
    } 
} 

: 다음 C의 기능을 고려

test_symbol_equality(:test) # => false 

왜이 경우? 예상되는 동작을 달성하려면 코드를 어떻게 변경해야합니까?

답변

5

예제에서 동일한 것을 비교하지 않았습니다.

rb_internID을 반환하지만 직접 VALUE과 비교합니다. 먼저 VALUE의 "unwrap (해제)"을 수행하고 연결된 ID을 검색해야합니다. 이것에 의해 if 문을 대체하면 문제가 해결됩니다.