Scala Language
연산자 오버로딩
수색…
사용자 정의 중위 연산자 정의
스칼라 연산자 (예 : +
, -
, *
, ++
등)는 메서드입니다. 예를 들어, 1 + 2
는 1.+(2)
로 쓸 수 있습니다. 이러한 종류의 메소드를 '삽입 연산자 (infix operators)'라고 합니다.
즉, 사용자 정의 메서드를 자신의 형식에 정의하여 이러한 연산자를 다시 사용할 수 있습니다.
class Matrix(rows: Int, cols: Int, val data: Seq[Seq[Int]]){
def +(that: Matrix) = {
val newData = for (r <- 0 until rows) yield
for (c <- 0 until cols) yield this.data(r)(c) + that.data(r)(c)
new Matrix(rows, cols, newData)
}
}
메서드로 정의 된 연산자는 다음과 같이 사용할 수 있습니다.
val a = new Matrix(2, 2, Seq(Seq(1,2), Seq(3,4)))
val b = new Matrix(2, 2, Seq(Seq(1,2), Seq(3,4)))
// could also be written a.+(b)
val sum = a + b
삽입 연산자는 하나의 인수 만 가질 수 있습니다. 연산자 앞에있는 객체는 연산자 뒤에 객체에 대한 자신의 연산자라고합니다. 하나의 인수를 가진 스칼라 메서드는 중위 연산자로 사용할 수 있습니다.
이것은 패시몬과 함께 사용해야합니다. 일반적으로 자신의 메서드가 해당 연산자에서 기대하는 바를 정확히 수행하는 경우에만 좋은 연습으로 간주됩니다. 의심스러운 경우
+
대신add
와 같이 좀 더 보수적 인 이름을 사용하십시오.
사용자 정의 단항 연산자 정의
단항 연산자와 연산자를 앞에 추가로 정의 할 수 unary_
. 단항 연산자는 unary_+
, unary_-
, unary_!
로 제한됩니다 unary_!
및 unary_~
:
class Matrix(rows: Int, cols: Int, val data: Seq[Seq[Int]]){
def +(that: Matrix) = {
val newData = for (r <- 0 until rows) yield
for (c <- 0 until cols) yield this.data(r)(c) + that.data(r)(c)
new Matrix(rows, cols, newData)
}
def unary_- = {
val newData = for (r <- 0 until rows) yield
for (c <- 0 until cols) yield this.data(r)(c) * -1
new Matrix(rows, cols, newData)
}
}
단항 연산자는 다음과 같이 사용할 수 있습니다.
val a = new Matrix(2, 2, Seq(Seq(1,2), Seq(3,4)))
val negA = -a
이것은 패시몬과 함께 사용해야합니다. 단항 연산자에 예상치 못한 정의가있는 단항 연산자가 오버로드되면 코드가 혼동 될 수 있습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow