[SCALA] 객체를 확장 할 수있는 방법이 있습니까?
SCALA객체를 확장 할 수있는 방법이 있습니까?
스칼라, 우리는 객체를 확장 할 수 없습니다 :
object X
object Y extends X
찾을 수 없습니다 : 오류 오류가 제공 X를 입력
내 경우에는 누군가가 객체의 일부 기능을 정의하고 나는 (기본적으로 다른 방법을 추가)를 확장해야합니다. 이 객체를 확장하는 가장 쉬운 방법이 있을까요?
해결법
-
==============================
1.너무 자주 정답은 실제 비즈니스 요구 사항에 따라 달라. 그것은 더 이상 싱글을하지 않을 것이기 때문에 객체에서 확장하는 것은 어떤 의미에서 그 객체의 목적을 무시하는 것입니다.
너무 자주 정답은 실제 비즈니스 요구 사항에 따라 달라. 그것은 더 이상 싱글을하지 않을 것이기 때문에 객체에서 확장하는 것은 어떤 의미에서 그 객체의 목적을 무시하는 것입니다.
어떤 해결책이 될 수있는 것은 추상적 인 특성으로 동작을 추출하는 것입니다. 그래서 같이 그 특성을 확장 개체를 만들 :
trait T{ // some behavior goes here } object X extends T object Y extends T { // additional stuff here }
-
==============================
2.다른 개체에서 사용하는 방법과 값을 원하는 경우에 당신은 가져 오기를 사용할 수 있습니다.
다른 개체에서 사용하는 방법과 값을 원하는 경우에 당신은 가져 오기를 사용할 수 있습니다.
object X{ def x = 5 } object Y{ import X._ val y = x }
-
==============================
3.그게 두 가지를 만들 것 때문에 실제로 객체를 확장 할 수 있으며, 정의에 의해 객체는 한 번만 존재 (편집 : 객체 정의가 클래스 나 메소드에있을 수 있기 때문에 글쎄, 그건, 사실이 아니다).
그게 두 가지를 만들 것 때문에 실제로 객체를 확장 할 수 있으며, 정의에 의해 객체는 한 번만 존재 (편집 : 객체 정의가 클래스 나 메소드에있을 수 있기 때문에 글쎄, 그건, 사실이 아니다).
당신의 목적을 위해,이 시도 :
object X { } object Y { def a = 5 } implicit def xToY(x: X.type) = Y println(X.a)
실제로 확장하지 않지만, 원래 정의 된 것보다 당신이 그것에 새로운 방법을 호출 할 수 없습니다.
-
==============================
4.두 개체 사이의 코드 공유 할 수있는 유일한 방법은 하나 이상의 공통의 슈퍼 클래스 / 특성을 가진 것입니다.
두 개체 사이의 코드 공유 할 수있는 유일한 방법은 하나 이상의 공통의 슈퍼 클래스 / 특성을 가진 것입니다.
-
==============================
5.당신은 클래스 + 동반자 객체로 부모를 변환 한 다음 아이 예컨대 클래스를 확장 할 수 있습니다
당신은 클래스 + 동반자 객체로 부모를 변환 한 다음 아이 예컨대 클래스를 확장 할 수 있습니다
Parent.scala에서
class Parent {} object Parent extends Parent {}
그리고 Child.scala에서
object Child extends Parent {}
예, 그것은 더 솔루션보다 해킹.
-
==============================
6.도티 (스칼라 3의 기초)와 함께, 당신은 다른 방법으로 개체의 선택된 구성원에 대한 별칭을 정의 할 수 있도록 수출 조항을 통해 (대신 상속) 구성을 사용할 수 있습니다 :
도티 (스칼라 3의 기초)와 함께, 당신은 다른 방법으로 개체의 선택된 구성원에 대한 별칭을 정의 할 수 있도록 수출 조항을 통해 (대신 상속) 구성을 사용할 수 있습니다 :
object X { def f = 5 } object Y { export X._ def g = 42 def h = f * g } Y.f // 5 Y.g // 42 Y.h // 210
당신은 또한 당신이 내보낼 회원 제한 할 수 있습니다 :
object X { def f = 5; def g = 6 } object Y { export X.f } Y.f // 5 Y.g ^^^ value g is not a member of Y
from https://stackoverflow.com/questions/7625040/is-there-any-way-to-extend-an-object by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 : 지능 또는 없음으로 변환 문자열 (0) | 2019.11.20 |
---|---|
[SCALA] 이 스칼라 변수로 튜플 할당을 할 수 있습니까? [복제] (0) | 2019.11.20 |
[SCALA] 스파크 DataFrame 그룹화 데이터의 표준 편차를 계산 (0) | 2019.11.20 |
[SCALA] 갱신 후 해결되지 않은 의존성 SBT 0.13.0 (0) | 2019.11.20 |
[SCALA] 어떻게 유착에 가장 numberOfPartitions을 계산? (0) | 2019.11.20 |