2010-03-15 4 views
6

대신스칼라 : 형식으로 varargs를 지정하는 방법?

def foo(configuration: (String, String)*) 

의 내가 쓸 수 있도록하고 싶습니다 : 서브 클래스에서 오버라이드 (override) 할 때

type Configuration = (String, String)* 
def foo(configuration: Configuration) 

주요 사용 사례 쉬운 방법 서명을 제공하는 것입니다

UPDATE : 나는 가까이에 올 수있다

type Param = (String, String) 
def foo(configuration: Param*) 

하지만 더 나은 방법이 있습니까?

답변

9

아니요, *은 익명 함수 또는 매개 변수의 매개 변수 유형 인 ParamType에서만 사용할 수 있습니다.

4.6.2 반복 매개 변수 구문 : ParamType :: = 유형 ''매개 변수 섹션의 마지막 값 매개 변수가 접미사로 할 수있다 "", 예를 들어, (..., x : T *). 그런 반복 매개 변수의 유형 은 scalach.Seq [T] 형식의 시퀀스입니다. 반복 파라미터 T와 방법 * 형 T.

Eastsun의 예 @ 컴파일러 버그 첫 줄이 아닌 제에의 인수 가변 개수 걸릴. 이 작업은 허용되어서는 안 : 나는 bug을 제기 한

scala> type VarArgs = (Any*) 
defined type alias VarArgs 

.

이것은 By-Name Parameters와 비슷한 제한 사항입니다. 이 경우 컴파일러에서는 형식 별칭을 만들지 않습니다.

scala> type LazyString = (=> String) <console>:1: error: no by-name parameter type allowed here 
     type LazyString = (=> String) 

최종적인 표현 방법은이 형식을 나타내는 것입니다.

+0

이미 수정되었습니다! https://lampsvn.epfl.ch/trac/scala/ticket/3180 – retronym

2

난 당신이

type Configuration = ((String, String)*) 
def foo(configuration: Configuration) 

를 사용할 수 있다고 생각하지만 컴파일러 충돌 (2.8.0.r21161-b20100314020123)를 만든다. 그것은 scala 컴파일러의 버그 인 것 같습니다.

1

당신은 사용자가 서열 인스턴스 최적이 아닌

foo(List("1"->"2")) 

을 구성 할

type Param = (String, String) 
type Configuration = Seq[Param] 

def foo(configuration : Configuration) 

로했다 정의 할 수 있습니다.

관련 문제