อาร์กิวเมนต์ตัวเลือกสำหรับสูง-คำสั่งฟังก์ชัน

0

คำถาม

ฉันพยายามเขียนถูกเชื่อมโยงสำหรับซ็อกเกตได้.บ io.

ฉันกำลังมีปัญหากับฟังก์ชัน(next() ขอตัวอย่างเช่นรหัสอยู่ที่ด้านล่าง),เหมือนกันก็ไม่มีข้อโต้แย้งหรือเกิดข้อผิดพลาดสิ่ง(Js.Exn.raiseError("ERROR!")).

ฉันไม่สามารถหาทางกำหนดฟังก์ชันลายเซ็นต์ที่สามารถใช้ทั้งสองประเภทของเถียงกันเหมือนค่างว

ฉันไม่แน่ใจด้วยซ้ำถ้าอะไรฉันขอร้องสำหรับคืนไปได้ใน rescript,ช่วยแก้ปัญหานั่นที่ที่เหมาะสม rescript ทางที่จะเป็นเกียรติอย่างยิ่ง

ของปัจจุบัน implementation ดูเหมือนนี้:

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 และเมื่อเร็วๆนี้มีแมลงกับ currying ว่าคอมไพเลอร์ผู้เขียนดูเหมือนจะไม่สนใจในการซ่อมดังนั้นมันอาจจะไม่ได้ทำงานที่นั่นเหมือนกันแต่มันอาจจะคุ้มที่จะลอง:

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

Lastly มีอยู่ก่อนแล้บางอย่า bindings สำหรับซ็อกเกตได้.บ io(ห่วยแตกจริง-ซ็อกเกตได้.บ io). พวกนี้ยังไม่จัดการคดีนี้โชคร้ายแต่มันอาจจะช่วยคุณจากกาสรรหาหนบางอย่าล้ออย่างน้อยนะ

2021-11-20 18:44:49

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่