수색…


사용자 정의 중위 연산자 정의

스칼라 연산자 (예 : + , - , * , ++ 등)는 메서드입니다. 예를 들어, 1 + 21.+(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