वैकल्पिक तर्क के लिए उच्च आदेश कार्यों

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))
})

उत्पन्न होगा जो निम्न JavaScript:

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

एक अन्य विकल्प हो सकता है का उपयोग करने के लिए वैकल्पिक तर्क है, लेकिन यह नहीं लगता है के साथ काम करने uncurrying, और हाल ही में वहाँ गया है के साथ कीड़े currying है कि संकलक लेखक के लिए लगता है, में कोई दिलचस्पी नहीं है फिक्सिंग, तो यह काम नहीं हो सकता है वहाँ या तो है, लेकिन यह हो सकता है एक शॉट के लायक:

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

अन्त में, वहाँ पहले से ही मौजूद है कुछ बाइंडिंग के लिए सॉकेट.io (बी एस-सॉकेट.io). ये भी नहीं संभाल इस मामले दुर्भाग्य से, लेकिन यह हो सकता है से बचाने के लिए फिर से खोज करने के कुछ पहियों पर कम से कम.

2021-11-20 18:44:49

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में