등장인물
Generator
<-
- 프로그램(함수)을 실행한다.
- 리턴 값을 반환한다.
Assignment
이해하기
1단계. 무엇이 실행될까?
1-1
import zio._
import java.io.IOException
object Main extends ZIOAppDefault {
override def run =
for {
start <- print("시작")
end = print("끝")
} yield ()
private def print(line: String): ZIO[Any, IOException, Int] = {
zio.Console.printLine(line).as(0)
}
}
시작
1-2
import zio._
import java.io.IOException
object Main extends ZIOAppDefault {
override def run =
for {
start <- print("시작")
end = print("끝")
_ <- end
} yield ()
private def print(line: String): ZIO[Any, IOException, Int] = {
zio.Console.printLine(line).as(0)
}
}
시작
끝
결론
- Assignment는 함수를 실행하지 않는다.
2단계. 실행한 후에는 뭐가 남을까?
2-1
import zio._
import java.io.IOException
object Main extends ZIOAppDefault {
override def run =
for {
start <- print("시작")
end <- print("끝")
_ <- print(s"start는 $start")
_ <- print(s"end는 $end")
} yield ()
private def print(line: String): ZIO[Any, IOException, Int] = {
zio.Console.printLine(line).as(0)
}
}
시작
끝
start는 0
end는 0
2-2
import zio._
import java.io.IOException
object Main extends ZIOAppDefault {
override def run =
for {
start <- print("시작")
end = print("끝")
_ <- print(s"start는 $start")
_ <- print(s"end는 $end")
} yield ()
private def print(line: String): ZIO[Any, IOException, String] = {
zio.Console.printLine(line).as("끝!!")
}
}
시작
끝
start는 끝!!
end는 끝!!
결론
- Generator는 함수 실행 후 함수가 반환한 값을 가진다.
3단계. 함수를 대입해서 출력하면 뭐가 나올까?
3-1
import zio._
import java.io.IOException
object Main extends ZIOAppDefault {
override def run =
for {
start <- print("시작")
hello = print("안녕하세요")
_ <- print(s"hello는 $hello")
} yield ()
private def print(line: String): ZIO[Any, IOException, Int] = {
zio.Console.printLine(line).as(0)
}
}
시작
hello는 OnSuccess(<empty>.Main.print(Main.scala:15),Stateful(<empty>.Main.print(Main.scala:15),zio.FiberRef$unsafe$$anon$2$$Lambda$330/0x0000000800db2650@58825efa),zio.ZIO$$Lambda$96/0x0000000800d3d000@5215f382)
3-2
import zio._
import java.io.IOException
object Main extends ZIOAppDefault {
override def run =
for {
start <- print("시작")
hello = print("안녕하세요")
_ <- print(s"hello는 $hello")
_ <- hello
} yield ()
private def print(line: String): ZIO[Any, IOException, Int] = {
zio.Console.printLine(line).as(0)
}
}
시작
hello는 OnSuccess(<empty>.Main.print(Main.scala:15),Stateful(<empty>.Main.print(Main.scala:15),zio.FiberRef$unsafe$$anon$2$$Lambda$330/0x0000000800db2650@58825efa),zio.ZIO$$Lambda$96/0x0000000800d3d000@5215f382)
안녕하세요
결론
- Assignment로 대입되면 함수에 파라미터까지 담긴 프로그램이 된다.
- Assignment로 대입된 값을 Generator로 실행할 수 있다.