partail 함수를 반환하는 함수에 의해 오버로드 된 함수를 호출하는 방법

Panurg

아래 f기능 중 하나를 사용하여 "I 'm not partial"을 인쇄하는 방법 과 아래 코드가 "I 'm partial"을 인쇄하는 이유는 무엇입니까? 그리고 스칼라에서 부분 함수와 이름 오버로딩을 생성하는 함수 (아마도 arity 0)와 연결된 몇 가지 일반적인 규칙이 있습니까?

object T1 extends App{    
  case class C()
  def f: PartialFunction[C, Unit] = { case c:C ⇒ println( "I'm partial") }
  def f(c: C): Unit = { println("I'm not partial") }
  (f:C ⇒ Unit)(C()) // Why this is printing "I'm partial"?
}
속임수

표현은 응용 프로그램이 아닙니다. x의 정의를 모호한 호출과 비교하십시오.

scala> :pa
// Entering paste mode (ctrl-D to finish)

object T1 extends App{    
  case class C()
  def f: PartialFunction[C, Unit] = { case c:C ⇒ println( "I'm partial") }
  def f(c: C): Unit = { println("I'm not partial") }
  (f:C ⇒ Unit)(C()) // Why this is printing "I'm partial"?
}

// Exiting paste mode, now interpreting.

defined object T1

scala> T1 main null
I'm partial

scala> import T1._
import T1._

scala> val x: C => Unit = f
x: T1.C => Unit = <function1>

scala> f(C())
<console>:12: error: ambiguous reference to overloaded definition,
both method f in object T1 of type (c: T1.C)Unit
and  method f in object T1 of type => PartialFunction[T1.C,Unit]
match argument types (T1.C)
              f(C())
              ^

scala> x(C())
I'm partial

사양에 따르면 (글 머리 기호 3) f만큼 구체적 f(...)이지만 그 반대는 아닙니다 (글 머리 기호 1).

응용 프로그램의 괄호는 다음과 같은 두 가지를 비교하고 있음을 의미합니다 f(...).

도움이되는 경우 다음과 같은 일반적인 방법으로 우선 순위를 지정합니다.

scala> trait Helper { def f: PartialFunction[C, Unit] = { case c:C ⇒ println( "I'm partial") } }
defined trait Helper

scala> :pa
// Entering paste mode (ctrl-D to finish)

object T extends Helper {
def f(c: C): Unit = { println("I'm not partial") }
}

// Exiting paste mode, now interpreting.

defined object T

scala> T f new C
I'm not partial

작성할 수는 있지만 정상적인 방식으로 호출 할 수없는 다른 API가 있습니다.

scala> trait X { def f(i: => Int) = i }
defined trait X

scala> trait Y { def f(i: Int) = 2 * i }
defined trait Y

scala> class Z extends X with Y
defined class Z

scala> new Z().f(42)
res5: Int = 84

scala> typeOf[Z].members filter (_.name.toString == "f")
res7: Iterable[reflect.runtime.universe.Symbol] = SynchronizedOps(method f, method f)

scala> (new Z(): X).f(42)
res8: Int = 42

또는 여기에서 다른 함수를 호출 할 방법이 없습니다.

scala> class YY extends Y { def f(i: => Int) = i }
defined class YY

scala> new YY().f(42)
<console>:20: error: ambiguous reference to overloaded definition,
both method f in class YY of type (i: => Int)Int
and  method f in trait Y of type (i: Int)Int
match argument types (Int)
              new YY().f(42)
                       ^

scala> (new YY(): Y).f(42)
res15: Int = 84

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

변수에 할당 된 외부 함수에서 함수 내부 함수를 호출하는 방법

분류에서Dev

msvc의 스레드 또는 프로세스에서 호출 된 함수를 식별하는 방법

분류에서Dev

동일한 맵 내의 다른 함수에서 맵에 저장된 함수를 호출하는 방법

분류에서Dev

val에 할당하지 않고 암시 적으로 반환 된 함수를 호출하는 방법

분류에서Dev

함수 내에서 함수를 호출하기 위해 missing ()으로 처리되는 누락 된 인수 처리

분류에서Dev

나중에 전달 된 데이터로 함수를 호출하는 방법

분류에서Dev

JS에서 생성 된 객체를 함수로 호출하는 방법

분류에서Dev

postgresql- if 문에서 함수 호출로 변수를 정의하는 방법

분류에서Dev

R에 정의 된 특정 환경으로 함수를 편집하는 방법

분류에서Dev

새로 생성 된 _blank 탭에서 함수를 호출하는 방법

분류에서Dev

Factory Service에 정의 된 ng-click에서 함수를 호출하는 방법

분류에서Dev

Python에서 자체 정의 된 명령 줄 함수를 호출하는 방법

분류에서Dev

함수를 인수로 사용하는 함수의 인수 내부에 함수를 정의하는 방법

분류에서Dev

다른 함수 내에서 함수의 메서드를 호출하는 방법

분류에서Dev

호출 된 함수에 따라 errno를 사용하는 방법

분류에서Dev

전달 된 함수를 호출하는 방법 (함수에 인수로 전달 된 함수 ptr)

분류에서Dev

활동이로드 된 후 함수를 호출하는 방법

분류에서Dev

자체적으로 함수를 반환하는 함수를 반환하는 함수를 Scala에서 정의하는 방법

분류에서Dev

콜백 함수 내에서 상속 된 함수를 호출하는 방법

분류에서Dev

오버로드 된 함수를 호출하는 일반 T

분류에서Dev

변수에 저장된 함수를 호출하는 방법

분류에서Dev

jQuery로 MYSQL에서 업데이트 된 데이터를 얻기 위해 PHP 함수를 호출하는 방법

분류에서Dev

기본 인수로 호출 된 함수를 모의하는 방법

분류에서Dev

SQL의 함수에서 함수를 호출하는 방법

분류에서Dev

SFINAE를 사용하여 오버로드 된 함수의 모호성을 해결하는 방법

분류에서Dev

CLISP에서 함수를 반환하는 함수를 정의하는 방법

분류에서Dev

Ncurses 함수를 반환하는 함수를 만드는 방법

분류에서Dev

미리 정의 된 함수를 호출하고 해당 함수 내에있는 변수의 속성에 액세스하는 방법은 무엇입니까?

분류에서Dev

C # 일반 코드에서 함수를 호출하는 방법

Related 관련 기사

  1. 1

    변수에 할당 된 외부 함수에서 함수 내부 함수를 호출하는 방법

  2. 2

    msvc의 스레드 또는 프로세스에서 호출 된 함수를 식별하는 방법

  3. 3

    동일한 맵 내의 다른 함수에서 맵에 저장된 함수를 호출하는 방법

  4. 4

    val에 할당하지 않고 암시 적으로 반환 된 함수를 호출하는 방법

  5. 5

    함수 내에서 함수를 호출하기 위해 missing ()으로 처리되는 누락 된 인수 처리

  6. 6

    나중에 전달 된 데이터로 함수를 호출하는 방법

  7. 7

    JS에서 생성 된 객체를 함수로 호출하는 방법

  8. 8

    postgresql- if 문에서 함수 호출로 변수를 정의하는 방법

  9. 9

    R에 정의 된 특정 환경으로 함수를 편집하는 방법

  10. 10

    새로 생성 된 _blank 탭에서 함수를 호출하는 방법

  11. 11

    Factory Service에 정의 된 ng-click에서 함수를 호출하는 방법

  12. 12

    Python에서 자체 정의 된 명령 줄 함수를 호출하는 방법

  13. 13

    함수를 인수로 사용하는 함수의 인수 내부에 함수를 정의하는 방법

  14. 14

    다른 함수 내에서 함수의 메서드를 호출하는 방법

  15. 15

    호출 된 함수에 따라 errno를 사용하는 방법

  16. 16

    전달 된 함수를 호출하는 방법 (함수에 인수로 전달 된 함수 ptr)

  17. 17

    활동이로드 된 후 함수를 호출하는 방법

  18. 18

    자체적으로 함수를 반환하는 함수를 반환하는 함수를 Scala에서 정의하는 방법

  19. 19

    콜백 함수 내에서 상속 된 함수를 호출하는 방법

  20. 20

    오버로드 된 함수를 호출하는 일반 T

  21. 21

    변수에 저장된 함수를 호출하는 방법

  22. 22

    jQuery로 MYSQL에서 업데이트 된 데이터를 얻기 위해 PHP 함수를 호출하는 방법

  23. 23

    기본 인수로 호출 된 함수를 모의하는 방법

  24. 24

    SQL의 함수에서 함수를 호출하는 방법

  25. 25

    SFINAE를 사용하여 오버로드 된 함수의 모호성을 해결하는 방법

  26. 26

    CLISP에서 함수를 반환하는 함수를 정의하는 방법

  27. 27

    Ncurses 함수를 반환하는 함수를 만드는 방법

  28. 28

    미리 정의 된 함수를 호출하고 해당 함수 내에있는 변수의 속성에 액세스하는 방법은 무엇입니까?

  29. 29

    C # 일반 코드에서 함수를 호출하는 방법

뜨겁다태그

보관