복붙노트

[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. ==============================

    1.스칼라는 다음과 같은 일을 구분 :

    스칼라는 다음과 같은 일을 구분 :

    편의 스칼라 당신이 빈 매개 변수 목록을 생략하다 할 수 있지만,이 중 어느 것도 해당되지 않습니다. (덧붙여, 두 개의 빈 매개 변수 목록은 동일하지 않습니다.)

    단위는 () 기록에도 불구하고 그래서,이 함수 나 메소드의 기능을 인수 괄호 ()와 동일하지 않습니다. 대신, Tuple0로) (생각합니다.

    당신이 f를 말한다면, : 단위 => INT, 당신이 무슨 뜻인지 "F는 하나 개의 매개 변수를 사용하지만 () 항상 같은 지루한 Tuple0 값이어야 단위이기 때문에 그것은 정말 지루한 매개 변수이다"입니다. 당신이있는 거 쓰는 것은 F 정말 짧은 (단위 :) => Int 인.

    당신이 f를 말한다면 : () => Int 인은, 당신은 "f는 매개 변수를 사용하지 않는 및 int를 생산"을 의미한다.

    당신이 f를 말한다면 : => INT, 당신은 그 "우리가이 코드에서 사용할 (그리고 매번 재 - 평가)까지 int 값을 생성하는 어떤 문장의 실행을 지연"을 의미한다. 기능적으로, F 등 기본적으로 동일한 되 고이 끝 : () => Int 인 (내부적으로이 같은 Function0 클래스로 변환), 그러나 그것은 아마도 생략 항상 (폐쇄의 컴팩트 양식을 할 수 있도록, 다른 사용이있다 =>) 호출 코드입니다.

  2. ==============================

    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. ==============================

    3.케이스 (1) 및 상기 (2)에서, 루프 자체 라기보다는 루프의 반환 값 유형에 푸 번째 인수 검사하고 실패! = 지능 유닛 => 국제

    케이스 (1) 및 상기 (2)에서, 루프 자체 라기보다는 루프의 반환 값 유형에 푸 번째 인수 검사하고 실패! = 지능 유닛 => 국제

    루프에 대한 변경은 오타가 있습니다.

  4. from https://stackoverflow.com/questions/2774516/functions-without-arguments-with-unit-as-argument-in-scala by cc-by-sa and MIT license