[SCALA] 통화 별 이름 수와 스칼라 변수 인수 목록?
SCALA통화 별 이름 수와 스칼라 변수 인수 목록?
이 같은 일부 코드를 가지고 :
def foo (s: => Any) = println(s)
내가 가변 길이 인수 목록에이 변환 할 때, 그것은 더 이상 (스칼라 2.10.0-RC2에서 테스트) 컴파일되지 않습니다 :
def foo (s: => Any*) = println(s)
나는 이런 식으로 작동하는지, 무엇을 작성해야합니다?
해결법
-
==============================
1.대신 제로 인수 기능을 사용해야합니다. 하고 싶다면해도 돼
대신 제로 인수 기능을 사용해야합니다. 하고 싶다면해도 돼
implicit def byname_to_noarg[A](a: => A) = () => a
그리고
def foo(s: (() => Any)*) = s.foreach(a => println(a())) scala> foo("fish", Some(7), {println("This still happens first"); true }) This still happens first fish Some(7) true
-
==============================
2.문제가 있습니다 : https://issues.scala-lang.org/browse/SI-5787
문제가 있습니다 : https://issues.scala-lang.org/browse/SI-5787
허용 대답을 위해, 원하는 동작을 복구합니다 :
object Test { import scala.language.implicitConversions implicit def byname_to_noarg[A](a: => A) = () => a implicit class CBN[A](block: => A) { def cbn: A = block } //def foo(s: (() => Any)*) = s.foreach(a => println(a())) def foo(s: (() => Any)*) = println(s(1)()) def goo(a: =>Any, b: =>Any, c: =>Any) = println(b) def main(args: Array[String]) { foo("fish", Some(7), {println("This still happens first"); true }) goo("fish", Some(7), {println("This used to happens first"); true }) foo("fish", Some(7), {println("This used to happens first"); true }.cbn) } }
웃는 고양이 문법 실례합니다.
from https://stackoverflow.com/questions/13307418/scala-variable-argument-list-with-call-by-name-possible by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] "구조적인 세련미의 매개 변수 유형은 정제 외부에서 정의하는 추상 형식을 참조 할 수 없습니다" (0) | 2019.11.17 |
---|---|
[SCALA] 작업 직렬화 할 수없는 오류 : 스칼라 불꽃 (0) | 2019.11.17 |
[SCALA] 여러 매개 변수를 폐쇄 인수 유형을 추론하지 (0) | 2019.11.17 |
[SCALA] 단일 스레드 구현보다는 Akka - 스트림 구현 속도가 느린 (0) | 2019.11.17 |
[SCALA] 불평등 길이리스트의 목록을 전치하는 스칼라에서 안전한 방법이 있습니까? (0) | 2019.11.17 |