문제

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)) {
    ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top