2012-08-23 1 views
0

Vegetables.scala라는 스칼라 소스 파일을 작성했습니다. 아래의 코드에서 달성하고자하는 것은 import 절이 어떻게 작동하는지 이해하는 것입니다. 필자는 Eclipse에서이 프로그램을 입력하고 Eclipse 기반 REPL을 시작했습니다. 야채를 확장하는 Spinach라는 새로운 객체를 만들고이를 val에 할당하고 결국 Vegetable 객체의 showColor 메소드를 호출하여 Spinach 객체를 전달합니다. 나는 그 예제가 터무니없는 소리를 낸다는 것을 알고 있지만, 지금은 스칼라의 개념/메커니즘을 이해하려고 노력하고 있습니다. 이 목적을 위해 REPL에서 다음을 수행했습니다.스칼라 가져 오기 절을 사용하여 메서드 매개 변수에서 가져 오는 방법

이것이 REPL에서 수행 한 작업이며 오류가 발생합니다.

import com.att.scala.Vegetables._ 
import java.awt.Color 
val obj = object Spinach extends Vegetable { val name = "Spinach" val color = Color.GREEN } 

<console>:1: error: illegal start of simple expression 
     val obj = object Spinach extends Vegetable { val name = "Spinach" val color = Color.GREEN } 
       ^

Vegetable.scala에 대한 코드는 다음과 같습니다 :

package com.att.scala 
import java.awt.Color 

trait Vegetable { 
    val name: String 
    val color: Color 
} 

    object Vegetables { 
    object Asparagus extends Vegetable { 
     val name = "Asparagus" 
     val color = Color.GREEN 
    } 

object Carrot extends Vegetable { 
    val name = "Carrot" 
    val color = Color.ORANGE 
} 
val veggiePlatter = List(Asparagus, Carrot) 

def showColor(veggie: Vegetable) { 
    import veggie._ 
    println("Entered showColor") 
    import veggie._ 
    println("veggie color is " + color) 
    } 
} 

무엇이 오류를 설명 할 수 있는가? 첫째, REPL에서 객체를 만들고이를 val에 할당하는 올바른 방법이 무엇인지 이해하려고합니다. 그 과정이 끝나면 그 값을 매개 변수로 전달하기 바랍니다. 그런 다음 showColor 내부에서 가져 오기 절을 테스트하여 veggie 매개 변수의 멤버를 실제로 가져올 지 확인합니다.

답변

2

개체 정의는 정적 멤버 또는 클래스를 정의하는 것과 같습니다. 변수를 선언하고 동시에 변수에 지정할 수 없습니다. (이 정의되어 후 개체가 이미 그 이름을 통해 액세스 할 수있는 그리고 사실 당신은 정말 할 필요가 없습니다.)

그래서 예로서 REPL에서 일 것이다 :

import com.att.scala.Vegetables._ 
import java.awt.Color 
object Spinach extends Vegetable { val name = "Spinach" val color = Color.GREEN } 

하는 것 Spinach이라는 개체를 정의하십시오. 그 후 Vegetables.showColor(Spinach)으로 전화하여 초기 목표를 달성 할 수 있습니다. 당신이 특히 유용하지 불구하고 (유효 할 것이다 오브젝트 선언 한 후에 당신이 정말로 변수, 당신은 val obj = Spinach를 부를 수에 할당하고 싶다면

- Spinach 이미 그 일에 대한 명확한 이름을 obj 효과적으로 것 별칭 일뿐입니다.). 같은 줄에서 작업하면 이라고 선언하지만 잘못된 구문입니다.

+3

'val s = Seq' - 변수에 싱글 톤 객체를 할당 할 수 있습니다. – axel22

+0

그건 내가 알지 못했던 사실이다. 시금치의 변수 할당에 대한 귀하의 업데이트에 감사드립니다 – ilango

+0

감사합니다, axel22 – ilango

관련 문제