해결된 질문
작성
·
164
2
강의 를 다시 보고 다시볼때 생각 드는 거지만
최초 실행시 수지라는 함수에 gen.next(msg).value
메세지 인자에 빈 문자열이 들어가게 됩니다.
yield 는 빈문자열이면 실행을 멈추게 되고 , 그다음
민수가 안녕 나는 민수야 라고 console 에 찍히게 되는데 이부분이 뭔가 그림으로 표현해주시면 더 수월할 것 같습니다.
다른 제네레이터 예제는 이해가 가는데 협력이 가능한 제네레이터에선 무언가 건너 뛰는 가려운 느낌을 받더라구요 .
그 가려운 부분이 뭘까 고민해보니 저는 약간 함수라 하면
함수 a 안에 b 를 호출한다 라는 가정에 .
a() 를 호출한다 => a 안에 b 가 호출된다 .
실행순서는 a 다음 b 가 호출된다. 라는 고정 관념때문에
이번 예제가 어려운것 같습니다 .
첫번째로
gen.next(msg).value 메세지 인자를 넣었는데
minsu 함수에선 인자를 받는 부분이 없습니다.
그 인자가 민수 함수의 수지 : , yield msg <= 이부분에 꽂히는것 같기는 한데, 받은 매개변수가 없이 어떻게 저기로 꽂히는걸까 하는 의문이 들어요 ㅠㅠ 설명 부탁 드릴수 있을까요
답변 4
4
suji 함수를 기준으로 설명을 드리면,
아래 코드를 실행해도 minsu 내부 코드는 실행되지 않습니다.
const gen = minsu();
그러다가 suji 함수에서 아래 코드를 실행하면 minsu 쪽은 첫 번째 yield를 만날 때까지 실행됩니다.
gen.next('').value
이때 next에 입력된 빈 문자열은 minsu 쪽에서 받을 수 있는 값이 아닙니다. (무의미한 값)
minsu 쪽에서 멈춰있는 yield가 받아가는 값은,
suji에서 그다음 호출하는 next의 매개변수 '안녕 나는 수지야' 입니다
제가 yield가 받아가는 값이라고 표현을 했는데요
yield를 함수라고 생각하시면 이해하시는데 도움이 될거에요 (사실 함수는 아니긴하지만요)
yield(함수)가 반환하는 값은 suji 쪽에서 next 매개변수로 입력한 값입니다.
제너레이터는 함수의 탈을 쓴 완전히 새로운 개념이기 때문에 처음에 이해하시기 힘들거에요
말씀하신대로 그림으로 표현하는 게 좋겠네요
다음에 강의 자료 업데이트할 때 반영하도록 하겠습니다!
1
0
저도 같은 부분에서 막혔는데 저는 설명을 봐도 이해가 안 되네요...
애초에 제일 처음 수지의 msg인 ''를 왜 무시하는지는 모르겠어요. 무의미한 값이라는 건 알겠는데 저도 함수처럼 생각이 되어서 그런지 그러면 빈문자열인 ''라도 출력되어야 하는게 아닌가?라는 생각이 계속드네요.
반면에 이후 민수의 첫번째 대화면 '안녕 나는 민수야'가 출력되는 부분은 알겠는데 예제를 더 생각해봐야 할것같아요.
next의 매개변수로 들어오는 값은 yield의 반환값이 된다.라는 점에서 더 헷갈리는 것같아요. ...
그리고 저도 yield msg 부분 때문에?? 더 헷갈리는 것같아요!! 계속 반복해서 봐야겠네요!
0