2013-03-09 4 views
0

루비는 강하게 타입 화 된 언어입니다. 따라서 type casting 대신 type conversion을 수행합니다. 이제 두 가지 유형의 전환이 있습니다 (implicitexplicit).루비에서의 타입 변환

루비가 어떤 컨텍스트에서 어떤 종류의 변환을 적용할지 결정하는 규칙을 기반으로합니까?

+0

[ "강력하게 형식화 된"] (http : //stackoverflow.com/a/9929697/395760). 그것은 정의가없고, 무의미하며, 가치가 없으며, 틀림없이 유해합니다. – delnan

+0

혼란스러운 개념이 있다고 생각합니다. * 유형 변환 * 및 * 유형 변환 *은 대안이 아닙니다. * 타입 캐스팅 *은 정적으로 타입이 지정된 언어에서 발생할 수 있지만 Ruby는 동적으로 타입 화되기 때문에 적용되지 않습니다. – troelskn

+0

@ trroelskn 사과. 나는 나의 설명을 바로 잡았다. 나는 오히려 이전보다는 오히려 넣어. –

답변

2

루비는 강력하거나 약한 타입이 아니기 때문에 변수/객체의 동작이 반드시 그 클래스가 속한 클래스에 의존하지 않고 실행 시간에 메소드 호출을 수행하지 않는다는 것을 의미합니다. 타입 체크. 할 수 없다면 오류가 발생합니다.

루비는 정수, 문자열 및 기타 내부 클래스에 대한 암시 적 변환을 수행합니다. 변환을 수행할지 여부는 왼쪽 피연산자에 따라 다릅니다. 예 :

1 + "2" 

왼쪽 피연산자는 정수이므로 루비는 연산 연산을 시도합니다 +. 그러나 오른쪽 피연산자는 문자열이므로 루비는 문자열에서 정수로 변환 (coersion)하려고합니다. (여전히 실패했지만 Integer의 메소드 +를 재정의해야하거나 String # to_i를 사용하여 명시 적 변환을 수행하는 원숭이 패치를 호출해야 함)

+0

왼쪽 피연산자가 정수형이므로 루비가 to_int를 사용하여 이러한 암시 적 변환을 시도했습니다. 그러나 문자열에 'to_int'가 없으므로 암시 적 변환이 실패하고 'TypeError : can not 문자열을 정수로 변환 '. 내 잡을 권리가 있니? –

+0

@Priti 예 및 아니오 ... 루비는 "to_xxx"메소드를 직접 호출하는 대신 내부 유형에 대해 유형 변환 (형 변환과 변환)을 사용합니다. – texasbruce