Skip to content

Commit 2b7a935

Browse files
committed
remove App wrapper objects
1 parent ead8a17 commit 2b7a935

File tree

5 files changed

+51
-62
lines changed

5 files changed

+51
-62
lines changed

_es/tour/abstract-type-members.md

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,14 @@ abstract class IntSeqBuffer extends SeqBuffer {
4040
type U = Int
4141
}
4242

43-
object AbstractTypeTest1 extends App {
44-
def newIntSeqBuf(elem1: Int, elem2: Int): IntSeqBuffer =
45-
new IntSeqBuffer {
46-
type T = List[U]
47-
val element = List(elem1, elem2)
48-
}
49-
val buf = newIntSeqBuf(7, 8)
50-
println("length = " + buf.length)
51-
println("content = " + buf.element)
52-
}
43+
def newIntSeqBuf(elem1: Int, elem2: Int): IntSeqBuffer =
44+
new IntSeqBuffer {
45+
type T = List[U]
46+
val element = List(elem1, elem2)
47+
}
48+
val buf = newIntSeqBuf(7, 8)
49+
println("length = " + buf.length)
50+
println("content = " + buf.element)
5351
```
5452

5553
El tipo retornado por el método `newIntSeqBuf` está ligado a la especialización del trait `Buffer` en el cual el tipo `U` es ahora equivalente a `Int`. Existe un tipo alias similar en la instancia de la clase anónima dentro del cuerpo del método `newIntSeqBuf`. En ese lugar se crea una nueva instancia de `IntSeqBuffer` en la cual el tipo `T` está ligado a `List[Int]`.

_ko/tour/abstract-type-members.md

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,14 @@ previous-page: inner-classes
3636
type U = Int
3737
}
3838

39-
object AbstractTypeTest1 extends App {
40-
def newIntSeqBuf(elem1: Int, elem2: Int): IntSeqBuffer =
41-
new IntSeqBuffer {
42-
type T = List[U]
43-
val element = List(elem1, elem2)
44-
}
45-
val buf = newIntSeqBuf(7, 8)
46-
println("length = " + buf.length)
47-
println("content = " + buf.element)
48-
}
39+
def newIntSeqBuf(elem1: Int, elem2: Int): IntSeqBuffer =
40+
new IntSeqBuffer {
41+
type T = List[U]
42+
val element = List(elem1, elem2)
43+
}
44+
val buf = newIntSeqBuf(7, 8)
45+
println("length = " + buf.length)
46+
println("content = " + buf.element)
4947

5048
메소드 `newIntSeqBuf`의 반환 타입은 트레잇 `Buffer`의 특수화를 따르며, 타입 `U``Int`와 같아진다. 메소드 `newIntSeqBuf` 내부의 익명 클래스 인스턴스화에서도 비슷한 타입 별칭이 있다. 여기선 `T` 타입이 `List[Int]`를 가리키는 `IntSeqBuf`의 새로운 인스턴스를 생성한다.
5149

@@ -57,15 +55,13 @@ previous-page: inner-classes
5755
abstract class SeqBuffer[U, +T <: Seq[U]] extends Buffer[T] {
5856
def length = element.length
5957
}
60-
object AbstractTypeTest2 extends App {
61-
def newIntSeqBuf(e1: Int, e2: Int): SeqBuffer[Int, Seq[Int]] =
62-
new SeqBuffer[Int, List[Int]] {
63-
val element = List(e1, e2)
64-
}
65-
val buf = newIntSeqBuf(7, 8)
66-
println("length = " + buf.length)
67-
println("content = " + buf.element)
68-
}
58+
def newIntSeqBuf(e1: Int, e2: Int): SeqBuffer[Int, Seq[Int]] =
59+
new SeqBuffer[Int, List[Int]] {
60+
val element = List(e1, e2)
61+
}
62+
val buf = newIntSeqBuf(7, 8)
63+
println("length = " + buf.length)
64+
println("content = " + buf.element)
6965

7066
여기선 [가변성 어노테이션](variances.html)을 사용해야만 한다는 점에 유의하자. 이를 사용하지 않으면 메소드 `newIntSeqBuf`에서 반환되는 객체의 특정 시퀀스 구현 타입을 감출 수 없게 된다. 뿐만 아니라 추상 타입을 타입 파라미터로 대체할 수 없는 경우도 있다.
7167

_pl/tour/abstract-type-members.md

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,14 @@ abstract class IntSeqBuffer extends SeqBuffer {
3939
type U = Int
4040
}
4141

42-
object AbstractTypeTest1 extends App {
43-
def newIntSeqBuf(elem1: Int, elem2: Int): IntSeqBuffer =
44-
new IntSeqBuffer {
45-
type T = List[U]
46-
val element = List(elem1, elem2)
47-
}
48-
val buf = newIntSeqBuf(7, 8)
49-
println("length = " + buf.length)
50-
println("content = " + buf.element)
51-
}
42+
def newIntSeqBuf(elem1: Int, elem2: Int): IntSeqBuffer =
43+
new IntSeqBuffer {
44+
type T = List[U]
45+
val element = List(elem1, elem2)
46+
}
47+
val buf = newIntSeqBuf(7, 8)
48+
println("length = " + buf.length)
49+
println("content = " + buf.element)
5250
```
5351

5452
Typ zwracany przez metodę `newIntSeqBuf` nawiązuje do specjalizacji cechy `Buffer`, w której typ `U` jest równy `Int`. Podobnie w anonimowej klasie tworzonej w metodzie `newIntSeqBuf` określamy `T` jako `List[Int]`.
@@ -62,15 +60,14 @@ abstract class Buffer[+T] {
6260
abstract class SeqBuffer[U, +T <: Seq[U]] extends Buffer[T] {
6361
def length = element.length
6462
}
65-
object AbstractTypeTest2 extends App {
66-
def newIntSeqBuf(e1: Int, e2: Int): SeqBuffer[Int, Seq[Int]] =
67-
new SeqBuffer[Int, List[Int]] {
68-
val element = List(e1, e2)
69-
}
70-
val buf = newIntSeqBuf(7, 8)
71-
println("length = " + buf.length)
72-
println("content = " + buf.element)
73-
}
63+
64+
def newIntSeqBuf(e1: Int, e2: Int): SeqBuffer[Int, Seq[Int]] =
65+
new SeqBuffer[Int, List[Int]] {
66+
val element = List(e1, e2)
67+
}
68+
val buf = newIntSeqBuf(7, 8)
69+
println("length = " + buf.length)
70+
println("content = " + buf.element)
7471
```
7572

7673
Należy też pamiętać o zastosowaniu [adnotacji wariancji](variances.html). Inaczej nie byłoby możliwe ukrycie konkretnego typu sekwencji obiektu zwracanego przez metodę `newIntSeqBuf`.

_pt-br/tour/abstract-type-members.md

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,14 @@ abstract class IntSeqBuffer extends SeqBuffer {
3939
type U = Int
4040
}
4141

42-
object AbstractTypeTest1 extends App {
43-
def newIntSeqBuf(elem1: Int, elem2: Int): IntSeqBuffer =
44-
new IntSeqBuffer {
45-
type T = List[U]
46-
val element = List(elem1, elem2)
47-
}
48-
val buf = newIntSeqBuf(7, 8)
49-
println("length = " + buf.length)
50-
println("content = " + buf.element)
51-
}
42+
def newIntSeqBuf(elem1: Int, elem2: Int): IntSeqBuffer =
43+
new IntSeqBuffer {
44+
type T = List[U]
45+
val element = List(elem1, elem2)
46+
}
47+
val buf = newIntSeqBuf(7, 8)
48+
println("length = " + buf.length)
49+
println("content = " + buf.element)
5250
```
5351

5452
O tipo de retorno do método `newIntSeqBuf` refere-se a uma especialização da trait `Buffer` no qual o tipo `U` é agora equivalente a `Int`. Declaramos um tipo *alias* semelhante ao que temos na instanciação da classe anônima dentro do corpo do método `newIntSeqBuf`. Criamos uma nova instância de `IntSeqBuffer` na qual o tipo `T` refere-se a `List[Int]`.

_tour/abstract-type-members.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ previous-page: inner-classes
88
topics: abstract type members
99
prerequisite-knowledge: variance, upper-type-bound
1010

11-
redirect_from:
11+
redirect_from:
1212
- "/tutorials/tour/abstract-types.html"
1313
- "/tour/abstract-types.html"
1414
---
@@ -44,9 +44,9 @@ abstract class IntSeqBuffer extends SeqBuffer {
4444

4545
def newIntSeqBuf(elem1: Int, elem2: Int): IntSeqBuffer =
4646
new IntSeqBuffer {
47-
type T = List[U]
48-
val element = List(elem1, elem2)
49-
}
47+
type T = List[U]
48+
val element = List(elem1, elem2)
49+
}
5050
val buf = newIntSeqBuf(7, 8)
5151
println("length = " + buf.length)
5252
println("content = " + buf.element)

0 commit comments

Comments
 (0)