2010-08-23 3 views
4

Scala 인터프리터에서 테스트하는 것이 편리합니다. 그러나 기존 클래스와 동일한 이름을 가진 객체를 정의하기 때문에 암시 적 변환을 사용하는 코드를 재구성해야한다는 단점이 있습니다. 이 아니므로 REPL의 컴패니언 모듈이됩니다. 결과적으로 "실제 소스"로 다시 변환 할 때 코드가 작동 할 것이라고 확신 할 수 없습니다.스칼라 인터프리터에서 동반 클래스/모듈을 정의 할 수 있습니까?

REPL에 컴패니언을 정의 할 수있는 방법이 있습니까? 어쩌면

val v: A = "apple" 

가 컴파일

bigblock { 
    class A 

    object A { 
     implicit def strToA(s: String): A = // ... 
    } 
} 

있도록의 라인을 따라 뭔가.

object ABlock { 
    class A 

    object A { 
     implicit def strToA(s: String): A = // ... 
    } 
} 
import ABlock._ 

또는 다음을, 당신은 한 줄에 모든 것을 넣어 경우 : 가까이

답변

10

...

class A; object A { implicit def strToA(s: String): A = // ... } } 

어느 쪽이든 불구하고 여전히 암시 적 변환을 가져해야합니다 당신이 요청에 따라 다음과 같은 일을 할 :

import ABlock.A.strToA // for the form with the enclosing object 
import A.strToA   // for the one-line form without an enclosing object 
val v: A = "apple" 

작업이 필요한 이유 것은 모든 라인이다 REPL에 입력 한 내용은 객체로 묶여 있으며 이후의 각 객체는 바로 앞에있는 객체 안에 중첩됩니다. 당신이 재정의 오류를받지 않고 다음과 같은 작업을 수행 할 수 있도록이 수행됩니다. (효과적으로, a의 두 번째 정의는 여기에 최초의 그림자)

val a = 5 
val a = "five" 

을 최신 버전으로

+0

감사! 레코드의 경우'import ABlock.A.strToA'는 (import 객체를 사용하여)'import ABlock._'을 한 후에는 불필요합니다. –

2

을 사용할 수 있습니다 사용 : 명령을 붙여 넣으십시오.

관련 문제