[SCALA] 스칼라의 인수로 유닛 인수없이 기능,
SCALA스칼라의 인수로 유닛 인수없이 기능,
def foo(x:Int, f:Unit=>Int) = println(f())
foo(2, {Unit => 3+4}
//case1
def loop:Int = 7
foo(2, loop) //does not compile
changing loop to
//case 2
def loop():Int = 7
foo(2, loop) // does not compile
changing loop to
//case 3
def loop(x:Unit): Int = 7 //changing according to Don's Comments
foo(2,loop) // compiles and works fine
없는 경우 1과 경우 2도 작업을해야한다? 왜이 작동하지 않습니다?
로 foo는 정의
def foo(x:Int, y:()=>Int)
다음 두 작품이 아닌 경우 1 케이스.
그들은 모든 기능 중 하나의 방법을 정의하는 작업에 생각이 arent.
// 또한 내가 => foo는의 지능은 나쁜 스타일, Y는 () 생각 : => 지능이 아닌 작업, 의견을하지?
해결법
-
==============================
1.스칼라는 다음과 같은 일을 구분 :
스칼라는 다음과 같은 일을 구분 :
편의 스칼라 당신이 빈 매개 변수 목록을 생략하다 할 수 있지만,이 중 어느 것도 해당되지 않습니다. (덧붙여, 두 개의 빈 매개 변수 목록은 동일하지 않습니다.)
단위는 () 기록에도 불구하고 그래서,이 함수 나 메소드의 기능을 인수 괄호 ()와 동일하지 않습니다. 대신, Tuple0로) (생각합니다.
당신이 f를 말한다면, : 단위 => INT, 당신이 무슨 뜻인지 "F는 하나 개의 매개 변수를 사용하지만 () 항상 같은 지루한 Tuple0 값이어야 단위이기 때문에 그것은 정말 지루한 매개 변수이다"입니다. 당신이있는 거 쓰는 것은 F 정말 짧은 (단위 :) => Int 인.
당신이 f를 말한다면 : () => Int 인은, 당신은 "f는 매개 변수를 사용하지 않는 및 int를 생산"을 의미한다.
당신이 f를 말한다면 : => INT, 당신은 그 "우리가이 코드에서 사용할 (그리고 매번 재 - 평가)까지 int 값을 생성하는 어떤 문장의 실행을 지연"을 의미한다. 기능적으로, F 등 기본적으로 동일한 되 고이 끝 : () => Int 인 (내부적으로이 같은 Function0 클래스로 변환), 그러나 그것은 아마도 생략 항상 (폐쇄의 컴팩트 양식을 할 수 있도록, 다른 사용이있다 =>) 호출 코드입니다.
-
==============================
2.() => 지능이 Function0 [지능] 일 동안 유닛 => 지능이 기능 1이다 [단위, 지능]
() => 지능이 Function0 [지능] 일 동안 유닛 => 지능이 기능 1이다 [단위, 지능]
scala> val function0: () => Int = () => 5 function0: () => Int = <function0> scala> val function1: Unit => Int = u => 5 function1: (Unit) => Int = <function1> scala> function0() res0: Int = 5 scala> function1("anything") res1: Int = 5 scala> function1(100) res2: Int = 5 scala>
또한 그 () 단위의 목적은주의
scala> function1(()) res11: Int = 5 scala> function1 () res12: Int = 5 scala> function1() res13: Int = 5 scala> val unit = () unit: Unit = () scala> function1(unit) res15: Int = 5 scala> function1 apply unit res16: Int = 5 scala>
-
==============================
3.케이스 (1) 및 상기 (2)에서, 루프 자체 라기보다는 루프의 반환 값 유형에 푸 번째 인수 검사하고 실패! = 지능 유닛 => 국제
케이스 (1) 및 상기 (2)에서, 루프 자체 라기보다는 루프의 반환 값 유형에 푸 번째 인수 검사하고 실패! = 지능 유닛 => 국제
루프에 대한 변경은 오타가 있습니다.
from https://stackoverflow.com/questions/2774516/functions-without-arguments-with-unit-as-argument-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 정확히 싱글 타입 무엇입니까? (0) | 2020.01.02 |
---|---|
[SCALA] 아파치 스파크와 JSON 읽기 -`corrupt_record` (0) | 2019.12.31 |
[SCALA] 추상 형식의 멤버 콘크리트 클래스 (0) | 2019.12.07 |
[SCALA] 누군가가 나에게 스칼라에서 암시 적 변환을 설명 할 수 있습니까? (0) | 2019.12.06 |
[SCALA] SparkSQL - 읽기 마루 파일을 직접 (0) | 2019.11.30 |