2014-11-05 1 views
5

저는 scala의 초보자입니다. Here은 내가 작성하려고하는 Models.scala입니다. 내가스칼라 케이스 class.type이 매개 변수를 사용하지 않습니다.

Models.scala:25: models.Session.Network.type does not take parameters 
[error]   network : Network = Network() , 

나는이 오류가 발생하는 이유, 내가 어떤 매개 변수를 전달하고 있지 않다 이해하지 못하는 네트워크를 수행 할 때의 그 오류를주고있다 SBT 패키지를 실행하면(). 누군가 제발 나를 도울 수 있습니까

답변

0

당신은 어떤 일들이 계속 진행될 것 같습니다. 코드에 import Sessions._ someplace가 있습니까? 오류는 사용자의 암시적인 BSonDocument 클래스 인 Session.Network를 참조하십시오. 아마도 일반 사례 클래스를 만들려고합니다.

명시 적으로 네트워크를 사용해보십시오 : 네트워크 : models.Network = models.Network()

다음
2

이 문제 재현 작은 코드입니다 : 첫 번째 줄에

case class A(b:B = B(3, 5)) 

case class B(i: Int, j: Int) 

object A { 

    val B = "whatever" 
} 

을, 우리는

를 얻을 수
too many arguments for method apply: (index: Int)Char in class StringOps  

케이스 클래스의 서명을 정의 할 때 생성자의 서명 (new로 호출 할 때)과 동반자 개체 (당신이 새 것이 아니라면).

인수에 기본값 (코드에서 Network(), 그리고 Bine (3, 5))을 넣으면이 코드는 생성자의 컨텍스트와 동반자 개체.

동반 개체 Session을 정의하면 apply 메서드가이 개체에 자동으로 추가됩니다. 그것은 당신의 동반자 객체에서 Network()가 정의한 Network 객체의 Network.apply()를 의미하며, 내 코드에서 "whatever"값을 갖는 문자열 B를 의미합니다.

정말 이상한 것은 기본 표현식이 다른 의미를 가질 수 있지만 생성자와 적용 메소드의 컨텍스트에서 모두 올바른 것일 수 있다는 것입니다. 이 경우, 새 여부와 상관없이 다른 행동을 취할 수 있습니다. 여기

은 예입니다

case class A(b:B = bb) 

case class B(i: Int, j: Int) 

object bb extends B(3, 4) 

object A { 

    val bb = new B(7, 2) 
} 


object Test extends App { 

    println(A()) 
    println(new A()) 

} 

실행 테스트는 특정 문제에 대한

A(B(7,2)) 
A(B(3,4)) 

를 인쇄합니다 쉬운 해결 방법이 있습니다. 당신이 패키지에 네트워크를 원하는 다음 분명하지 개체 세션에 있기 때문에

network: Network = models.Network(), 

는 분명히 작동합니다.

network: Network = new Network(), 

도 새롭기 때문에 컴파일러는 네트워크 값이 아닌 네트워크 유형을 찾을 것입니다. 컴패니언 개체 세션에서 네트워크 값은 로컬 선언에 의해 섀도 잉되지만 네트워크 유형은 섀도 잉되지 않습니다.

IMO의 경우 이전 모델 (모델. 네트워크)이 더 명확합니다.


추신. 사양을 확인한 결과 이상한 행동이이 사양과 일치한다고 생각합니다. 즉, (5.3.2) apply 메소드는 생성자와 동일한 매개 변수 목록을 가진 companion 객체 내부에 생성됩니다. 여기에는 기본값이 포함되어 있는데,이 기본값은 컴패니언 개체 내부에서 컴파일됩니다.

+0

이것이 사양에 따른 것인지, 의도 한 것인지 (다른 동작은 지정하거나 구현하기가 너무 복잡하기 때문에) 모릅니다. 사양에 따르면,하지만 감독 | 사양을 위반했다. 사양을 확인하고 여전히 명확하지 않은 경우 메일 링리스트에 문의하십시오 –

+0

이제 사양과 일치한다고 생각합니다. 그럼에도 불구하고 나는 메일 링리스트에 통보했다. –

관련 문제