2014-10-14 7 views
3

이 코드 UniqueKeyGenerator가 있습니다. 생성 가능한 값을 예측 가능하게 만들고 싶기 때문에 점진적으로 추가 할 변수 번호가 있습니다. 어떻게 변경할 수 있습니까? 방금 대신 varval로 이것을 표현하려는 경우 당신이 Iterator을 사용할 수, 값 대신 변수를 미리변경할 수있는 증분 값을 어떻게 변경할 수 있습니까?

답변

3

에서

object UniqueKeyGenerator { 

    var number = 0 

    def generate(suiteClass: Class[_]): String = { 
    number = number + 1 
    suiteClass.getCanonicalName + "." + this.number 
    } 
} 

많은 감사합니다.

object UniqueKeyGenerator { 
    val numbers = Iterator.iterate(0)(_ + 1) 
    def generate(suiteClass: Class[_]): String = 
    s"${suiteClass.getCanonicalName}.${numbers.next()}" 
} 

그렇지 않으면 내가 원하는 내용을 모르겠다. 당신이 생성하고자하는 ID가있는 경우를 제외하고

Seq(classOf[String], classOf[Int], classOf[String]).zipWithIndex 
    .map({ case (suiteClass, i) => s"${suiteClass.getCanonicalName}.$i" }) 

// res: List(java.lang.String.0, int.1, java.lang.String.2) 
1

반복자에서 당신은 또한 폐쇄를 사용할 수 있습니다, 예를 들면 : 당신이 앞에 모든 입력이있는 경우

는, 당신은 다음처럼 작성할 수 있습니다 다음 자연수가 아니라 더 복잡한 표현의 결과입니다.

val nextId = { 
    var id = 0 
    () => { 
     id = id + 1 // change it to something more complex if you like 
     id 
    } 
} 

"id"는 여전히 변수이지만 바깥 쪽에서는 액세스 할 수 없습니다. 사용할 수있는 유일한 방법은 nextId를 호출하는 것입니다.

def generate(suiteClass: Class[_]): String = { 
    suiteClass.getCanonicalName + "." + nextId() 
} 
관련 문제