Elm:
การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ
วิธีการ:
Elm ทำงานในเบราว์เซอร์ ดังนั้นจึงไม่มีสิทธิพิเศษในการเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งโดยตรงเหมือนกับภาษาฝั่งเซิร์ฟเวอร์หรือภาษาสำหรับเดสก์ท็อป อย่างไรก็ตาม เพื่อการสาธิต ลองสมมติว่าคุณกำลังใช้ Elm กับเฟรมเวิร์กฝั่งเซิร์ฟเวอร์เช่น Node.js ผ่าน elm server
หรือการตั้งค่าที่คล้ายกัน ซึ่งอนุญาตให้ผ่านอาร์กิวเมนต์ เท่านั้น โค้ดของคุณจะไม่จัดการกับอาร์กิวเมนต์โดยตรง แต่เราจะจำลองรูปแบบดังนี้:
-- สมมติว่ามีอาร์กิวเมนต์มาจากฝั่งเซิร์ฟเวอร์
type alias Flags =
{ arg1 : String
, arg2 : Int
}
-- ตัวอย่างฟังก์ชัน `init` ของ Elm ที่ใช้ Flags
init : Flags -> ( Model, Cmd Msg )
init flags =
( { defaultModel | passedArg1 = flags.arg1, passedArg2 = flags.arg2 }
, Cmd.none
)
ตัวอย่างผลลัพธ์ (จัดโครงสร้างเหมือนถูกส่งมาจากเซิร์ฟเวอร์):
{ "arg1": "Hello", "arg2": 42 }
วิเคราะห์ลึก
เนื่องจาก Elm เป็นภาษาฝั่งหน้าบ้าน ดังนั้นโดยปกติจะไม่จัดการกับอาร์กิวเมนต์บรรทัดคำสั่ง ตัว Elm ทำงานในสภาพแวดล้อมที่ควบคุมโดยเบราว์เซอร์ บรรทัดคำสั่งเป็นสิ่งที่เหลืออยู่จากยุคคอมพิวเตอร์แรกๆ ทำหน้าที่เป็นหน้าต่างเข้าไปยังระบบ
ใน Node.js หรือสภาพแวดล้อมที่คล้ายกัน คุณจะใช้ process.argv
เพื่อรับอาร์กิวเมนต์ ด้วย Elm การเริ่มต้นโปรแกรม Elm จาก JavaScript โดยใช้ flags จะใกล้เคียงที่สุด ซึ่งช่วยในการส่งต่อข้อมูลภายนอก เรายอมรับอาร์กิวเมนต์จากบรรทัดคำสั่งผ่านภาษาฝั่งเซิร์ฟเวอร์โดยอ้อม แล้วส่งต่อไปยัง Elm ในรูปแบบของ flags
สำหรับการผสมผสานอย่างลึกซึ้ง โปรแกรม Elm ถูกบันทึกไว้ร่วมกับโค้ดฝั่งเซิร์ฟเวอร์ ให้ประสบการณ์ที่ไม่มีรอยต่อกับผู้ใช้ รูปแบบการเริ่มต้นโปรแกรม Elm ด้วย flags ที่เฉพาะเจาะจงนี้มีพลังอย่างมาก ช่วยให้สามารถเริ่มต้นได้อย่างยืดหยุ่นและปรับแต่งได้ตามสภาพแวดล้อมและกรณีการใช้งานที่แตกต่างกัน
ดูเพิ่มเติม
- คู่มืออย่างเป็นทางการเกี่ยวกับ flags ของ Elm: https://guide.elm-lang.org/interop/flags.html
- เอกสารคำสั่ง Node.js เกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่ง: https://nodejs.org/docs/latest/api/process.html#process_process_argv
- ตัวอย่างของ Elm กับ Node.js: https://medium.com/@_rchaves_/using-elm-with-node-elm-server-side-rendering-via-http-nodejs-and-elm-0-19-6c97f062f7eb