2012-07-28 3 views
2

나는 다음과 같은 코드가 작동을 만들고 싶어하지만, 나는 컴파일 오류가 발생합니다 : '하지 않는 A # C를 객체 매개 변수'스칼라 중위/후위 연산자

"B"CD

내가 떠나면 'd'코드가 잘 컴파일됩니다. 그것은 나를 위해 새롭다 중/접미사 연산자와 관련이 있어야합니다. 누군가 위의 코드가 작동하도록 도와 주시겠습니까? 또한 위의 코드 구문이 작동하지 않는 이유에 대해 나에게 설명해주십시오.

내 클래스 정의 : 당신의 "b" c d"b".c(d) 수 있지만 완전하게 작성해야합니다, 그래서 당신이 원하는 것은, "b".c.d입니다 있도록 스칼라 a op b에서

object A { 
    implicit def stringToA(b: String) : A = new A(b) 
} 

class A(private val b: String) { 

    object c { 
     println("c") 

     def d: Unit = { 
      println("d!") 
     } 
    } 
} 

답변

4

a.op(b)입니다. 당신이 정말로 그것을 "b" c d를 작성해야하는 경우

, 당신은 예를

trait D {} 

object d extends D 

class A { 

    def c(ignored: D) = println("d!") 

} 

또는 답변을 가능성이

class A { 

    object c { 
     def apply(ignored: D) = println("d!") 
    } 
} 
+0

디디에 덕분에 대해 d 방법 c의 인수를 만들기 위해 시도 할 수 있습니다. 나는 그것을 작동 시켰어. 내 생각에 유일한 단점은 관련된 많은 대상들이 있다는 것입니다. 소규모 프로젝트의 경우에는 문제가 아니라고 생각합니다. 그러나 더 큰 프로젝트의 경우 어떤 클래스가 서로 소속하는지에 대한 개요를 잃어 버리고 있습니다. 그러나 스칼라가 멋진 언어라고 생각합니다. – user1024435

+0

확실히 제가 할 것도 아니고 장려하는 것도 아닙니다. DSL을 할 때만 그것을 사용하고 정말로''b "c d'가 필요합니다. –