2014-10-04 4 views
1

"areYouLazy"함수를 "string"을 최상의 평가 방법으로 평가하는 방법은 무엇입니까?지연 함수 인수?

def areYouLazy(string: => String) = { 
    string 
    string 
    } 

areYouLazy { 
    println("Generating a string") 
    "string" 
} 
+0

나는 그것이 가능하다고 생각하지 않습니다

는 단순히 액세스 할 때 처음에만 실행되는 lazy 캐시 값을 사용할 수 있습니다, 여러 실행을 방지하려면 변하기 쉬운. – Ashalynd

+0

'valYLazyAnymore = string;과 같이'areYouLazy'의 변수에 할당 할 수 있습니다. 문자열'. –

답변

7

전화는별로 이름 인수는 매번 실행 당신이 그들에 액세스 할 수 있습니다. 당신의`string`가 아니기 때문에

def areYouLazy(string: => String) = { 
    lazy val cache = string 
    cache // executed 
    cache // simply access the stored value 
} 
+0

고마워요! 나는 기능을 통해 그것을 끝내었다. 읽을 수있는 것 같습니다. 변수에 줄 이름이 적습니다. '개인 putOnTable (getCard :() => 옵션 [카드]) 데프 (암시 적 테이블 : 테이블) = getCard() 일부 (카드) @ 경기 { 경우 cardOption => table.addCard (카드) cardOption 사례 없음 => 없음 }' –

+0

@HappyCoder - 왜'getCard'가 여분의 이름이 아닌지 나는 이해하지 못합니다. 또한'() => A'보다는'=> A''에 인수를 전달하는 것이 더 어렵습니다. 자신의 방식대로해야 할 이유가있을 수 있지만 "가독성이 뛰어나다"며 "이름이 적습니다"는 것은 아닙니다. –