2012-02-21 3 views
7

는 내가 같은 간단한 질문을 할 것입니다하지만 어떻게 내가 내 주요 개체 내에서 내부 함수를 선언 한스칼라 업데이트 배열 요소

스칼라에서 배열 요소를 업데이트하고 나는이

object Main 
{ 
    def main(args: Array[String]) 
    { 
     def miniFunc(num: Int) 
     { 
      val myArray = Array[Double](num) 
      for(i <- /* something*/) 
       myArray(i) = //something 
     } 
    } 
} 
뭔가를해야합니까 결코 생각하지 않았다

하지만 예외가 생길 수 있습니다. 왜 누군가가 나를 설명 할 수 있습니까? 어떻게이 문제를 해결할 수 있습니까?

+0

무엇을 나에게 스칼라의 배열과 다른 컬렉션은 하나의 배열 요소를 업데이트하는 등 스칼라 안장처럼 (수 없음을 가정 할 수 있도록 불변이라고 할 때 몇 번이 조금 혼란) 그러나 실제로 그것이 의미하는 것은 한 번 차원을 변경할 수는 없지만 내용을 변경할 수 있다는 것입니다. –

+0

많은 컬렉션이 스칼라에서는 불변이지만 배열은 단지 자바 배열이며 변경할 수 있습니다. –

답변

11

누락 된 세부 정보를 채울 수 있습니까? 예를 들어, 코멘트가있는 곳은 무엇입니까? 예외는 무엇입니까? (그것은 완전한 코드 샘플로 질문을하고 문제가 입니다 분명 무엇 수 있도록하는 것이 가장 좋습니다.)

가 여기에 배열의 건설 및 업데이트의 예 : 아마도

scala> val num: Int = 2 
num: Int = 2 

scala> val myArray = Array[Double](num) 
myArray: Array[Double] = Array(2.0) 

scala> myArray(0) = 4 

scala> myArray 
res6: Array[Double] = Array(4.0) 

당신이하고 있습니다 가정하면 그 배열의 크기를 나타냅니다 num? 사실, 이것은 배열의 (유일한) 요소입니다. 어쩌면 당신은이 같은 원 :

def miniFunc(num: Int) { 
     val myArray = Array.fill(num)(0.0) 
     for(i <- 0 until num) 
      myArray(i) = i * 2 
    } 
+0

네, num은 배열의 크기를 나타냅니다. 감사합니다. – user1224307

+1

@ user1224307 'new' 키워드를 사용하는 경우에만 크기를 나타냅니다. 'Array (1, 2, 3)'는 요소 1, 2, 3을 가진 배열 일뿐입니다. –

+2

가치는 Array.tabulate를 사용하여 배열을 초기화 할 수 있다는 것을 의미합니다. 예를 들어 Array.tabulate (10) (identity) Array [Int] (0, 1, 2, 3, 4, 5, 6, 7, 8,9) 및 Array.tabulate (10) (_ * 2)는 Array [Int] (0, 2, 4, 6 , 8, 10, 12, 14, 16, 18) –