경계를 "제외"하는 하한을 적용하여 스칼라의 유형 (예 : 인수 유형)을보다 세부적으로 제어 할 수 있습니다. 예를 들어 는스칼라에서 수퍼 유형
def foo[ S <: String ](arg: S): S = ...
상기는 기능이 하위 인은 상기 상부의 설정을 할 수 있으며 그 S 있도록 하한
def bar[ S >: A <: B ](arg: S): S = ...
또한 문자열의 하위 종류 인수를 받아 들일 수 있도록 B 유형과 A의 수퍼 유형이 있습니다.
내 질문에 인수 유형을 설정하여 인수가 말 (String)의 수퍼 유형이 될 수는 있지만 포함하지는 않습니다 일부 슈퍼 타입의 하한 (이 경우 문자열)은 Any 유형을 말합니다.
UPDATE
sealed trait Helper[S]
object Helper {
implicit def stringSubtype[S >: String] = new Helper[S]{}
implicit def any = new Helper[Any]{}
}
def foo[S: Helper](r: S): Int = 1
val arg1: String = "hi"
val arg2: Any = "hello"
foo(arg1)
foo(arg2)
내가 ARG2와 전화가 불법 인수 예외가 발생하는 것을 기대하는 것입니다. 이 당신이 implicits를 통해 입력 레벨의 프로그래밍을 할 수와 같은 더 복잡한 유형의 제약 조건에 대한
답변 주셔서 감사합니다. 사용하고 싶지만 원하는 결과를 얻을 수 없습니다. 질문에 추가 한 업데이트를 살펴보십시오. –
그냥 대답에 대한 업데이 트가 질문에 업데이 트를 해결하는 것 같아 :). 미스터리는 스칼라 2.12.2에서 정확히 any2가 남아있는 이유에 대한 것임을 알 수 있습니다 (그리고 dotty : https://scastie.scala-lang.org/bbarker/VRGskOyrRyaRKWIOeJ8FUA/1). – bbarker