program story

Scala 유형 키워드 : 여러 클래스에서 사용하는 가장 좋은 방법

inputbox 2020. 11. 2. 07:56
반응형

Scala 유형 키워드 : 여러 클래스에서 사용하는 가장 좋은 방법


Haskell을 쓴 후 스칼라로 돌아와서, 클래스 정의를 좀 더 읽기 쉽게 만들기 위해 type 키워드를 사용하기 시작했습니다. 예 :

type RestfulParams = Map[String, String]
def canonicalize(params: RestfulParams): String = { ... }

내가 겪은 문제는 이러한 유형 정의가 클래스 또는 객체 내부에 있어야한다는 것입니다. Haskell 에서처럼 "일급 시민"이 아닙니다. 클래스 또는 객체 외부에서 유형을 정의하려고하면 컴파일러를 얻습니다 expected class or object definition.

내 문제는 패키지의 여러 클래스와 객체에서 이러한 유형을 사용하는 방법입니다. 내가 지금 한 일은 아주 추한 것 같습니다.

object RestfulTypes { type RestfulParams = Map[String, String] etc }

그리고 다른 클래스 파일에서 :

import utils.{RestfulTypes => RT}
def get(resource: String, params: RT.RestfulParams): String = { ... }

이 작업을 수행하는 더 좋은 방법이 있습니까? 부수적으로 Scala 전문가는 유형이 클래스 / 객체 내부에서만 정의 될 수있는 것이 좋은 것이라고 생각합니까?


개체 패키지 당신을 위해 일을?

기사에서 :

2.8까지 패키지에 넣을 수있는 것은 클래스, 트레이 트, 독립형 객체뿐이었습니다. 이들은 패키지의 최상위 수준에 배치되는 가장 일반적인 정의이지만 Scala 2.8은 사용자를 제한하지 않습니다. 클래스 안에 넣을 수있는 모든 종류의 정의는 패키지의 최상위 수준에 넣을 수도 있습니다. 전체 패키지의 범위에 포함하려는 도우미 메서드가있는 경우 계속 진행하여 패키지의 최상위 수준에 배치합니다. 이렇게하려면 패키지 개체에 정의를 넣습니다. 각 패키지는 하나의 패키지 객체를 가질 수 있습니다. 패키지 개체에 배치 된 모든 정의는 패키지 자체의 구성원으로 간주됩니다.

패키지 오브젝트 스칼라는 당신이 당신의 자신의 유형에 대해 같은 기술을 사용할 수 있다고 생각하므로, 이미 많은 유형 및 값이 있습니다.


이 경우 무엇이 좋을지 잘 모르겠지만 여기에 두 가지 옵션이 있습니다.

특성 사용 : ( 스칼라의 이타적인 특성 패턴 )

trait RestfulTypes {
  type Params = Map[String,String]
  //...
}

object MyRestService extends RestService with RestfulTypes { /* ... */ }

또는 패키지처럼 효과적으로 사용하여 개체의 멤버를 가져옵니다.

import util.RestfulTypes._

패키지 객체를 사용하고 거기에 유형 선언을 넣을 수 있습니다. 해당 패키지를 가져올 때 유형 정의를 사용할 수 있습니다.

예 :

//package myType
package object myType {type mine = List[String]}

패키지 객체는 객체 접두사 (예 : myType.mine)없이 사용할 수 있도록 패키지와 동일한 이름을 가지고 있습니다. 예를 들어 다른 이름으로 이름을 지정하면 다음과 같습니다.

//package myType
package object mainType {type mine = List[String]}

"패키지"를 가져올 때 mainType.mine으로 액세스 할 수 있습니다.

자세한 정보 : http://www.scala-lang.org/docu/files/packageobjects/packageobjects.html

참고 URL : https://stackoverflow.com/questions/7441277/scala-type-keyword-how-best-to-use-it-across-multiple-classes

반응형