2012-05-10 2 views
0

을 만들지 않고 스칼라와 불변의 발을 초기화 나는 다음과 같은 코드가 있습니다어떻게 다른 발

private def formatQuery(q:String = ""):String = { 
    val q2 = if (q=="") "*" else "'%s'".format(q) 
    [...] 

난 그냥 Q2 값을

가 someting를 선언 피하기 위해 몇 가지 관용적 방법이 있는지 알고 싶습니다을

private def formatQuery(
    q:String = if (q=="") "*" else "'%s'".format(q) 
):String = { 
    [...] 

같은 어떤 분명히 particula이 있습니까

답변

4

작동하지 않습니다 변수 q2에 할당하는 것을 피하려고하는 이유는 무엇입니까? 스타일 자체는 괜찮아 보입니다.

분명히 제안한 것이 효과가 없지만 여기서는 두 가지 제안이 있습니다.

는 원래 기능은 경우 :

private def formatQuery(q:String = ""):String = 
    doSomething(if (q=="") "*" else "'%s'".format(q)) 

또 다른 별도의 기능을 확인하는 것입니다 : 당신이 q2을 통과 할 경우

private def formatQuery(q:String = ""):String = { 
    val q2 = if (q=="") "*" else "'%s'".format(q) 
    doSomething(q2) 
} 

하나의 옵션이 바로 경우 - 다른 표현을 전달하는 것입니다

private def formatQuery(q:String = ""):String = 
    runQuery(if (q=="") "*" else "'%s'".format(q)) 

private def runQuery(q2:String):String = 
    doSomething(q2) 
+0

사실 새 밸브를 정의하는 것을 좋아하지 않습니다. 사실은 q를 초기화해야 할뿐입니다. 스칼라 스타일로 처리하는 것이 더 우아한 방법을 제공하는지 확인하는 것입니다. ... – opensas

+0

메소드에 가변 변수가 없습니다 (즉,'var'로 선언 된 변수가 없습니다). 당신은'var'을 사용하지 말아야합니다. 그러면 성공적으로 완료되었습니다. 나는 당신이 왜 하나를 추가해야하는지 아무 이유도 보지 않는다. 그러나 'val'을 사용하면 불변이므로 완전히 괜찮습니다. – dhg

+0

죄송합니다. 죄송합니다. 이전 질문을 삭제했습니다. 질문을 잘 이해하지 못했기 때문에 ... – opensas

2

세 번째 방법은 패턴 일치입니다.

private def formatQuery(q: String = ""): String = q match { 
    case _ if q.length == 0 => "*" 
    case _ => "'%s'".format(q) 
} 

필자는 처음에는 스타일이 좋았 기 때문에 선호했다.

1

아마도 오해가 있습니다. val 메서드 본문 내부는 둘러싼 클래스 또는 특성의 필드가 아니지만 ... 단지 로컬 변수입니다. 따라서 은 로컬 변수 생성을 위해 필드를 만드는 데 사용됩니다.