Ruby C API를 사용하여 기호의 동일성 테스트
-
13-12-2019 - |
문제
Ruby C API에서 기호 동등성을 테스트하는 방법을 찾으려고 합니다.다음 C 함수를 고려하십시오.
static VALUE test_symbol_equality(VALUE self, VALUE symbol) {
if (rb_intern("test") == symbol) {
return Qtrue;
} else {
return Qfalse;
}
}
Ruby 관점에서 이 메서드는 예상대로 작동하지 않습니다.
test_symbol_equality(:test) # => false
왜 이런가요?예상되는 동작을 달성하려면 코드를 어떻게 변경해야 합니까?
해결책
당신은 당신의 예에서 같은 것을 비교하지 않습니다.
rb_intern
반환합니다 ID
, 하지만 당신은 그것을 다음과 비교하고 있습니다. VALUE
곧장.먼저 "포장을 풀어야" 합니다. VALUE
, 검색 중 ID
와 연관되어 있습니다.교체 if
이 진술은 문제를 해결해야합니다.
if (rb_intern("test") == SYM2ID(symbol)) {
...
제휴하지 않습니다 StackOverflow