묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결함수형 프로그래밍과 JavaScript ES6+
이 강좌에 대한 질문은 아닌데 질문이 있습니다.
선생님의 함수형 프로그래밍 책을 사서 혼자 학습하고 인프런 함수형프로그래밍 무료강의를 막 다듣고 책 복습하고 있는 학생인데요. 함수형 프로그래밍 책의 2장의 비동기와 재귀부분의 코드를 읽는데 설명이 간략하게만 나와있어서 질문드립니다. function _async(func) { return function() { arguments[arguments.length++] = function(result) { _callback(result); }; // 변경된 부분 (function wait(args) { /* 새로운 공간 추가 */ for (var i = 0; i < args.length; i++) if (args[i] && args[i].name == '_async_cb_receiver') return args[i](function(arg) { args[i] = arg; // func.apply(null, args); wait(args); }); func.apply(null, args); })(arguments); var _callback; function _async_cb_receiver(callback) { _callback = callback; } return _async_cb_receiver; }; } log(div(sub(add(10, 15), 5), 10)); 이 코드에서요. wait()이 하는 역할이 잘 이해가 되지않습니다. 제가 이해한 바로는 log->div->sub->add순으로 call stack에 쌓이고 add실행 시, async를 받고 wait(args) 실행할때는 _async_cb_receiver가 없기 때문에 그냥 반복문만 돌고 func.apply()되고 그다음 sub가 실행되는데 add가 async_cb_receiver를 리턴하여 첫번째 인자 args[0]에 걸려서 return add의 _async_cb_receiver(function(arg) { args[i] = arg; wait(args)}); 를 실행합니다. 여기서, _ async_cb_receiver함수는 _callback 변수에 인자로 들어간 익명함수를 할당하고 다시 _async_cb_receiver를 리턴합니다. 마찬가지로 이것이 반복되어 log까지 실행되고, 백그라운드에는 add, sub, div, log의 setTimeout이 시간을 세다가 task queue로 돌아와서 main이 종료되고 wait과 args를 참조하는 클로저인 콜백함수들이 이벤트 루프에 의해 하나씩 실행되는데 먼저 add의 콜백함수가 실행될 때는 _async_cb_receiver가 안걸려서 그냥 넘어갈 것이고, 그다음으로 sub의 콜백함수가 실행될 때, 아까 할당해놓았던 _async_cb_receiver가 걸려서 익명함수 function(arg) { args[i] = arg; wait(args)}가 result를 받아서 실행될텐데 책의 해설에서는 값을 치환하면서 재귀한다고 하셨는데요. args는 이 async_cb_receiver의 인자인 이 익명함수와 wait의 클로저가 참조하고 있는 sub의 args일 것이고 args[0]에 add의 리턴인 async_cb_receiver가 걸려서 _callback이 받은 result로 args[0]에 result를 할당하여 치환했고 다시 wait을 다시 실행하는데요. 왜 wait이 다시 재귀로 도는지 아무리 생각해도 이해가 안갑니다. 저 코드에서 wait(arg) 부분을 주석처리하고 익명함수에 func.apply(null, args)를 넣어도 에러없이 돌아갔는데요. sub가 _async_cb_receiver를 만났을때 값만 치환하고 func.apply()를 하면 됐지 다시 wait을 켜서 for문을 돌며 _async_cb_receiver를 확인하면서 기다려야되는 이유가 있나요? 질문이 두서없어서 죄송합니다. 저도 머릿속으로 최대한 상황들을 그려내려고하는데 지식이 부족해서 뭐가 어떻게 돌아가는지 정확히 모르겠네요.. 혹시 비동기 상황에서 log, sub, div, add의 콜백들이 어떤순서로 실행되는지는 알수 없기때문에 wait()을 쓰며 결과를 받을때까지 계속 자기자신으로 재귀하는건가요? 더 생각해보다가 다시 궁금한 점이 생겼는데 wait함수를 실행할때마다 콘솔에 찍히게 (function wait(args) { console.log(args[0] + args[1] + " wait"); /* 새로운 공간 추가 */ for (var i = 0; i < args.length; i++) if (args[i] && args[i].name == '_async_cb_receiver') return args[i](function(arg) { args[i] = arg; wait(args); }); func.apply(null, args); })(arguments); 이런식으로 찍어봤는데요. 저는 wait()이 마구 재귀할줄알았는데 실행결과를 보니 사이사이에 한번씩만 찍혔습니다. 콜백함수에서 wait() 재귀함수를 호출할경우 바로 실행되서 결과받을때까지 도는게 아니라 콜백함수처럼 다시 백그라운드 갔다가 task queue로 가서 콜백함수처럼 실행되나요? 정확한 동작을 알고싶은데 제 검색능력이 딸려서 잘 못찾겠네요
-
미해결퍼블리셔 취업을 위해 제대로 배워보는 html과 css, 그리고 웹표준
overflow:hidden이 왜 저런 효과를 나타내는지 이해가 안 갑니다..
영역에서 넘치는 부분을 가리는 overflow:hidden이 왜 area:after { }와 동일한 효과를 가져오는지 잘 이해가 가지 않습니다.. 조금만 상세한 설명을 해주실 수 있으신가요?
-
미해결프로그래밍, 데이터 과학을 위한 파이썬 입문
vector_size_check 이 결과는 제대로 나오는데 제출하면 실패가 뜹니다.
vertor_A = ([1, 2, 3], [3, 4, 5], [6, 7, 8], [9, 10])vertor_B = ([1, 2, 3], [3, 4], [6, 7, 8])vertor_C = ([1, 2, 3], [3], [6, 8])vertor_D = ([1, 2, 3], [3, 4, 5], [6, 7, 8])def vector_size_check(*vector_variables):return len(set(len(result) for row in vector_variables for result in row)) == 1FalseFalseFalseTrue제대로 한 것 같은데 submit.bat 해서 제출하면 실패로 떠요 혹시 이유를 알 수 있을까요? 어디가 잘못됐는지 모르겠습니다.
-
미해결[R을 R려줘] R 중급
Boston dataset 관련
Boston dataset이 R에서 기본 제공되는 데이터인지 잘 모르겠습니다.그냥 호출하니 없는 데이터셋이라고 나와서, 검색해보니 "MASS" package를 설치하고 library("MASS") 한 후에 사용하면 가능해지네요. 그 부분에 대해 간단히 안내가 있으면 좋을 것 같습니다.
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
git 레파지토리 접근 권한 요청드렸습니다.
확인 부탁드려요 :)
-
미해결처음시작하는 Google 공식 개발 언어 Kotlin
클래스 -> 테스트 메소드 호출 연결 부분에서 혼동이 와서 질문합니다.
클래스에서 해당 인터페이스를 사용하게 되는데 main 함수에서 test_method로 클래스 타입을 넘길 때 혼동이 와서 문의 합니다.main()...{ var t1 = TestClass1() test_method1(t1) //매개 class 형이 매개변수 타입이 되어야 할거라고 예상했음}fun test_method1(a1 : Inter1){ // a1 변수로 Inter1 타입으로 받는다는건지??? a1.method1() a1.method2()}기존 자바사용하는 방식이랑 다른것 같아 문의합니다.감사합니다.
-
미해결블록체인 이더리움 부동산 댑(Dapp) 만들기 - 기본편
메타 마스트 에러 문의입니다!!
RPC Error 해결법 미리알기 강의를 따라해도.. 같은 에러가 발생합니다 ㅠㅠ ALERT: [ethjs-rpc] rpc error with payload {"id":1259551468341,"jsonrpc":"2.0", "params":["0xf8d40485174876e8008302915e940b4b148c6ab76335899a1294c22f48964cb048698823aa796230c10000b86432d0c15f0000000000000000000000000000000000000000000000000000000000000007ed959c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b822d45a03d52a1f8335d3a29ff64fbaca50d16334d827fdc2114a2f83ceac6c52336cd22a06a131c69efd5d54bbd417047aa1c48a6f784055cd2a7f8d9fd82890f800151bd"],"method":"eth_sendRawTransaction"} Error: the tx doesn't have the correct nonce. account has nonce of: 0 tx has nonce of: 4
-
미해결스프링 기반 REST API 개발
Event newEvent = this.eventRepository.save(event)
이벤트 생성 API 개발 중 "이벤트 Repository"강의강의 내용 중 해당 코드가 있는데 혹시 어떤 의미인지 간략하게 알 수 있을까요?'''Event newEvent = this.eventRepository.save(event)'''
-
미해결자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
Scanner에서 오류가 납니다. 이유를 모르겠습니다.
마지막에 scanner.close(); 로 들은 설명대로 반환했는데도Exception in thread "main" java.lang.Error: Unresolved compilation problems:Scanner cannot be resolved to a typeScanner cannot be resolved to a typeat start7baeyeol.Class201902252231.main(Class201902252231.java:9)이라고 오류가 뜹니다 해결방법을 알려주세요
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
vue의 버전 3에서
'비공개 리포지토리 소개 및 뷰 CLI 설명' 부분에서 올려주신 강의를 따라해보려고 했는데요 기존 vue init webpack-simple vue-news 이 명령어가 기존의 cli를 만들어 주는 명령이라고 하셨는데 이게 제 vue버전이 3.4.1라는데 실행이 안되서 찾아보니까 버전 3에서는 해당 명령어가 사용이 안되나 봐요 ( https://stackoverflow.com/questions/49768034/command-vue-init-requires-a-global-addon ) 선생님은 어떻게 실행시키신건가요? ㅜ.ㅜ!ㅎㅎ 그리고 저는 윈도우즈를 사용하고 있고 vue를 처음 공부하는데요 강좌에 vue를 설치하는 부분이 없는거 같아서요! (맞나요?ㅠ) 이것저것 구글링을 해서 설치를 했는데 저처럼 모르는 분이 계실까봐 ㅠㅠ 혹시 참조를 해주실수 있으실까요?
-
미해결스프링 데이터 JPA
<version>42.2.2</version> 임포트가 안됩니다.
우선 version 작성시 컨트롤 스페이스시 해당 버전을 조회해 주지 못하고임의로 42.2.2로 작성해도 임포트를 제대로 해주지를 못하네요.우클릭 maven > reimport 클릭해도.. 안됩니다....
-
미해결스프링 웹 MVC
오타
강의 영상이 아니라 강의 노트 제목에3부 스프링 MVC 설정으로2부와 같은 제목으로 되어있습니다3부 스프링 MVC 활용으로 바뀌어야 할 것 같습니다
-
미해결PWA 시작하기 - 웹 기술로 앱을 만들자
인스톨 배너를 메뉴얼하게 띄우게 할 수는 없는지요?
영상에서 설명하신데로 30초간 사이트 접속을 유지해야 한다는 조건과상관없이 메뉴방식으로 인스톨배너를 강제로 띄울수는 없는지요?앞에 강좌에서 샘플 영상으로 보여주신 스타벅스 앱처럼 메뉴에서 사용자가홈에 바로가기 설치 같은 메뉴를 선택시 아이콘이 생성되었던 것 처럼 말이죠..궁금해요~
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
캐릭터페키지가 없어요.
윈도우 유니티 2018.3.5 버전인데 Assets > Import Package 에 강의화면처럼 캐릭터 페키지가 없습니다.어디서 임포트 하나요?
-
미해결유니티 게임 개발 (Unity 2D) - 시작부터 배포까지
질문있습니다!!
이런 러닝게임이아닌 쿠키런처럼 자동달리는 러닝게임에서 캐릭터에 달리는 모션과 점프모션과 슛팅모션을 넣는 방법이 궁금합니다 ㅠㅠ 달리다가 터치하면 점프하고 슛팅하고 하는게 궁금합니다 ㅠ
-
해결됨해외취업 ASP.NET Core 웹개발 기본 강좌
닷넷과 HTML5, 그리고...
안녕하세요.강좌 잘 들었습니다.궁금한게 있는데요,첫번째는 DB 서버에 연결하는 방법은 ASP를 이용해야 가능한가요?HTML5가 많은 것을 할 수 있다 던데 직접 연결은 안되는지요.그리고 또 하나는 보통 wwwroot 경로에 html 파일이 있어서웹페이지를 표시하잖아요? 그런데 wwwroot 경로에서 어떤 정보도찾을 수 없던데, 닷넷을 쓰면 어떤 식으로 화면에 표시 되는지궁금합니다.이상입니다. 수고하세요.
-
해결됨Node.js 교과서 - 기본부터 프로젝트 실습까지
스스로 해보기3(클라이언트/서버 비밀키 구분하기) 에러가 나서 문의 남깁니다.
터미널에서는 아래처럼 오류가 납니다.sequelize deprecated Model.find has been deprecated, please use Model.findOne instead node_modules/sequelize/lib/model.js:4212:9Executing (default): SELECT `id`, `host`, `type`, `clientSecret`, `frontSecret`, `createdAt`, `updatedAt`, `deletedAt`, `userId` FROM `domains` AS `domain` WHERE ((`domain`.`deletedAt` > '2019-02-24 14:06:19' OR `domain`.`deletedAt` IS NULL) AND `domain`.`host` = 'localhost:8003') LIMIT 1;OPTIONS /v2/token 204 31.393 ms - 0Executing (default): SELECT `id`, `host`, `type`, `clientSecret`, `frontSecret`, `createdAt`, `updatedAt`, `deletedAt`, `userId` FROM `domains` AS `domain` WHERE ((`domain`.`deletedAt` > '2019-02-24 14:06:19' OR `domain`.`deletedAt` IS NULL) AND `domain`.`host` = 'localhost:8003') LIMIT 1;Executing (default): SELECT `id`, `host`, `type`, `clientSecret`, `frontSecret`, `createdAt`, `updatedAt`, `deletedAt`, `userId` FROM `domains` AS `domain` WHERE ((`domain`.`deletedAt` > '2019-02-24 14:06:19' OR `domain`.`deletedAt` IS NULL) AND `domain`.`host` = 'localhost:8003') LIMIT 1;Executing (default): SELECT `domain`.`id`, `domain`.`host`, `domain`.`type`, `domain`.`clientSecret`, `domain`.`frontSecret`, `domain`.`createdAt`, `domain`.`updatedAt`, `domain`.`deletedAt`, `domain`.`userId`, `user`.`id` AS `user.id`, `user`.`email` AS `user.email`, `user`.`nick` AS `user.nick`, `user`.`password` AS `user.password`, `user`.`provider` AS `user.provider`, `user`.`snsId` AS `user.snsId`, `user`.`createdAt` AS `user.createdAt`, `user`.`updatedAt` AS `user.updatedAt`, `user`.`deletedAt` AS `user.deletedAt` FROM `domains` AS `domain` LEFT OUTER JOIN `users` AS `user` ON `domain`.`userId` = `user`.`id` AND (`user`.`deletedAt` > '2019-02-24 14:06:19' OR `user`.`deletedAt` IS NULL) WHERE ((`domain`.`deletedAt` > '2019-02-24 14:06:19' OR `domain`.`deletedAt` IS NULL) AND `domain`.`frontSecret` = NULL) LIMIT 1;POST /v2/token 401 53.205 ms - 100브라우저에서는 아래와 같이 나옵니다.code: 401message: "등록되지 않은 도메인입니다. 먼저 도메인을 등록하세요"도메인은 등록 해놓았는데 이런 오류가 나와서 오타인지 3번 정도 체크해봤는데 그건 아닌거 같아서 질문드립니다.
-
미해결리액트로 구현하는 블록체인 이더리움 Dapp
현 시점에서 HelloWorld.sol 컴파일이 실행되지 않습니다.
''' pragma solidity ^0.4.24; contract HelloWorld { string public greeting; constructor(string _greeting) public{ greeting = _greeting; } function setGreeting(string _greeting) public{ greeting = _greeting; } function say() public constant returns(string) { return greeting; } } ''' 위의 문법대로 하게 되면 컴파일 시 constant 부분에서 에러를 뱉어내어 컴파일 실습을 진행할 수 없습니다. Solidity 공식 문서에 가보게 되면 constant 부분에 view 로 대체하고, 변수자체를 string 이 아닌 uint를 사용하고 있습니다. 이와 같은 에러가 발생했을 시 어떻게 대처해야하는지 알고싶습니다.
-
미해결앱 12개를 만들며 배우는 Swift4 & iOS11 아이폰 iOS 개발 강좌
이런 에러가 나오네요..
버전이 바뀌어서 일까요?제가 완전히 똑같이 따라한 코딩도 에러가 나길래...강의자료로 첨부해주신 것도 확인해 보았는데..., 제 xcode에서 열면 빌드가 실패하면서"Views without any layout constraints may clip their content or overlap other views."라고 나오네요ㅠㅠ어떻게 해결해야 할까요?하루종일 그냥 따라서 했는데.. 실패가 나오니 뭔가 답답하네요ㅠ
-
미해결퍼블리셔 취업을 위해 제대로 배워보는 html과 css, 그리고 웹표준
강의자료 부탁드려요~ 기존 강의자료 다운로드 링크가 깨졌네요ㅠ
강의자료 부탁드려요~ 기존 강의자료 다운로드 링크가 깨졌네요ㅠ감사합니다.