Dynamic
와 변수를 추가
스칼라의 동적 유형에 명시 적 캐스트 : 이제피할
import language.dynamics
import scala.collection.mutable.HashMap
object Main extends Dynamic {
private val map = new HashMap[String, Any]
def selectDynamic(name: String): Any = {return map(name)}
def updateDynamic(name:String)(value: Any) = {map(name) = value}
}
val fig = new Figure(...) // has a method number
Main.figname = fig
, 내가 Main.figname.number
에 액세스하려는 경우 작동하지 않는, 컴파일러가 생각하기 때문에 그것은 타입이 Any
입니다. 이 Any
및 Figure
하지만 Figures
능력을 가지고하지 않도록
는하지만, 또한 Main.figname.isInstanceOf[Figure] == true
입니다. 이제 나는 그것을 캐스팅 할 수 있습니다. Main.figname.asInstanceOf[Figure].number
그리고 작동합니다! 이것은 추한 것입니다! 그리고 내 도메인 사용자에게 이것을 제시 할 수는 없습니다. (내부 DSL을 만들고 싶습니다.)
참고 : Any
대신에 Figure
의 상위 유형을 사용하면 작동하지 않습니다.
이 문제는 scala 2.10의 버그입니까?
부연 설명으로'def selectDynamic (name : String) : DynamicBase' 대신'selectDynamic'을'def selectDynamic [T] (name : String) : DynamicBase'로 정의해야했습니다. 불필요한 형 매개 변수는 컴파일러를 행복하게 만들 때 사용합니다. 그렇지 않으면'as'에 대한 호출이 직접적이고 통과하지 않더라도'selectDynamic' doe는 형식 매개 변수를 취하지 않는다고 말합니다 –
이것은 잘 작동합니다. 감사합니다. – Themerius