선택 사항에 대해 인수가 높은 순수

0

질문

내가 하려고 쓰기에 대한 바인딩 소켓에.io.

문제가 있으로 기능(next() 내 예제 코드에서는 아래),그 중 하나를 취하지 않는 인수 또는 오류 개체(Js.Exn.raiseError("ERROR!")).

나는 찾을 수 없을 정의하는 방법 기능을 서명할 수 있는 양쪽 유형의 논쟁으로 첫 번째 값입니다.

나도 확실하지 않는 경우에,내가 무엇을 요청은 가능한에서는 칙령을 어떤 도움 문제를 해결하는 적절한 칙령 방법,평가될 것입니다.

나는 현재 구현을 다음과 같습니다:

type server
type socket
type next = (. unit) => unit 

@new @module("socket.io") external socketIO: unit => server = "Server"
@send external use: (server, (socket, next) => unit) => unit = "use"
@send external listen: (server, int) => unit = "listen"
@send external on: (server, @string [ #connection(socket => unit) ] ) => unit = "on"

let io = socketIO()

io->use((socket, next) => {
    Js.log("FIRST")
    next(.)
})

io->use((socket, next) => {
    Js.log("SECOND")
    next(.)
})

io->on(#connection(socket => 
    Js.log("CONNECT")
))

io->listen(3000)
1

최고의 응답

2

그것에 가능한 일반적인 기능을 가지 변수의 번호를 인수지만,그것은 가능한 중 하나를 통과하는 undefined 거나 값,대부분의 경우에는 해당 될 것입니다.

이렇게 하는 한 가지 방법은 단순히 사용 option 유형입니다. 면 우리는 다시 정의 next

type next = (. option<int>) => unit 

우리는 그것을 이용할 수 있는 다음과 같이

io->use((_socket, next) => {
    next(. None)
    next(. Some(42))
})

를 생성하는 다음과 같은 자바 스크립트:

io.use(function (_socket, next) {
      next(undefined);
      return next(42);
    });

또 다른 옵션을 사용하여 선택적 인수지만,이 작동하지 않는 것으로 uncurrying,최근에는 거의 버그를 변환하는 컴파일러 저자하는 것에 관심을 고치는,그래서 그것은 작동하지 않을 수 있습니다 있지만,그것을 가치가있을 수도 있습니격:

type next = (~error: int=?, unit) => unit
...
io->use((_socket, next) => {
    next(())
    next(~error=42, ())
})

마지막으로,거기에 이미 존재하는 일에 대한 바인딩 소켓에.io(bs-socket.io). 이들은 또한 취급하지 않는 이 경우 불행하게도,그러나 그것은 당신을 저장할 수 있습니에게서 다시 발명 몇 바퀴를 적어도 있습니다.

2021-11-20 18:44:49

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................