2009-10-06 12 views
2

질문은 제목에 있습니다.매개 변수가 Symbol인지 여부를 어떻게 확인할 수 있습니까?

내 매개 변수는 문자열이나 기호가 될 수 있으며 다른 작업을 수행 할 항목에 따라 달라질 수 있습니다. Ruby에서이를 확인하는 방법이 있습니까?

+0

코드 냄새. 그것은 당신이 당신의 매개 변수가 들어오는 방식을 리팩토링해야한다는 표시입니다. –

+0

저는 동의합니다. 그러나 이것은 아주 간단한 뷰 도우미이며, 제가 이것을하고있는 이유는 예외를 일으키지 않고 유효한 모든 형식으로 매개 변수를 보낼 수 있기 때문입니다. – Damian

+0

arg = arg.to_sym을 사용하여 인수가 올바른 형식인지 확인할 수 있습니다. 이것은 문자열에 대해서는 작동하지만 가능한 모든 인수 유형에 대해서는 작동하지 않습니다. – johannes

답변

5
def foo(arg) 
    if arg.is_a?(Symbol) 
    do_symbol_stuff 
    else 
    do_string_stuff 
    end 
end 
+0

감사합니다. 그게 완벽합니다. – Damian

+0

더 좋은 방법이 있습니다. Class # === 메소드를 다음과 같이 사용하십시오 : Symbol === arg. 그것은 훨씬 더 읽기 쉽습니다. – johannes

+0

그건 물론 맛의 문제이지만 개인적으로 "arg가 기호라면"은 "arg equals equals symbol"보다 자연스럽게 읽습니다. – sepp2k

2

루비 오브젝트의 종류를 확인할 필요가 다른 솔루션

def foo(arg) 
    case arg 
    when Symbol 
     do symbol stuff 
    when String 
     do string stuff 
    else 
     do error stuff 
    end 
end 
관련 문제