Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 하이브리드앱
- 스칼라 강좌
- 주키퍼
- 파이썬 머신러닝
- Hyperledger fabric gossip protocol
- Play2
- hyperledger fabric
- 스칼라 동시성
- 파이썬
- 파이썬 동시성
- 그라파나
- Actor
- 안드로이드 웹뷰
- 스칼라
- Golang
- Adapter 패턴
- 파이썬 강좌
- 이더리움
- CORDA
- play 강좌
- 파이썬 데이터분석
- 플레이프레임워크
- akka 강좌
- 블록체인
- 엔터프라이즈 블록체인
- Play2 로 웹 개발
- 스위프트
- 하이퍼레저 패브릭
- Akka
- play2 강좌
Archives
- Today
- Total
HAMA 블로그
스칼라 강좌 (16) - Enumerations (열거) 본문
Scala 에서 Enumeration 사용하기
http://alvinalexander.com/scala/how-to-use-scala-enums-enumeration-examples 참조
문제 ) 스칼라에서 enumeration 을 사용하고 싶습니다.(상수로서 사용되는 문자열 )
해결책 1 ) Enumeration 클래스를 사용해서 열거형 만들기
scala.Enumeration 클래스를 확장하세요.
package com.acme.app { object Margin extends Enumeration { type Margin = Value val TOP, BOTTOM, LEFT, RIGHT = Value } }
그리고 이것을 import 로 가져가서 사용하심 됩니다
object Main extends App { import com.acme.app.Margin._ // use an enumeration value in a test var currentMargin = TOP // later in the code ... if (currentMargin == TOP) println("working on Top") // print all the enumeration values import com.acme.app.Margin Margin.values foreach println }
해결책 2 ) traits / case 를 사용해서 열거형 만들기
// a "heavier" approach package com.acme.app { trait Margin case object TOP extends Margin case object RIGHT extends Margin case object BOTTOM extends Margin case object LEFT extends Margin }
Enumeration 의 문제점 - 1
메소드 오버로딩에 문제가 생긴다. 아래를 보자.
/**
* Created by brad on 2016-09-30.
*/
import scala.collection._
import scala.util.parsing.json._
object Colours extends Enumeration {
val Red, Amber, Green = Value
}
object WeekDays extends Enumeration {
val Mon,Tue,Wed,Thu,Fri = Value
}
object Functions {
def f(x: Colours.Value) = println("That's a colour")
def f(x: WeekDays.Value) = println("That's a weekday")
}
object test {
import Colours._
def main(arg : Array[String]): Unit ={
Functions.f(Red)
}
}Error:(19, 7) double definition:
method f:(x: WeekDays.Value)Unit and
method f:(x: Colours.Value)Unit at line 18
have same type after erasure: (x: Enumeration#Value)Unit
def f(x: WeekDays.Value) = println("That's a weekday")
이 경우에 에러가 발생한다. Red 라고 명시했지만 구분 할 수 없다.
'Scala' 카테고리의 다른 글
스칼라 강좌 (18) -trait (1) | 2016.08.06 |
---|---|
스칼라 강좌 (17) - case class (0) | 2016.08.06 |
스칼라 강좌 (15) - Getter / Setter (0) | 2016.07.31 |
스칼라 강좌 (14) - 함수 와 메소드 (0) | 2016.07.23 |
스칼라 강좌 (13) - 클래스와 객체 (0) | 2016.07.16 |
Comments