Haskell:
การแทรกค่าลงในสตริง
วิธีทำ:
ใน Haskell, การแทรกตัวแปรลงในสตริงไม่ได้เป็นส่วนหนึ่งมาแต่ต้น แต่ด้วยแพ็คเกจ interpolate
คุณสามารถทำได้เกือบเหมือนกัน ก่อนอื่น, ตรวจสอบว่าคุณมีแพ็คเกจ:
cabal update
cabal install interpolate
ตอนนี้, เขียนฮาสเกลบางอย่าง:
{-# LANGUAGE QuasiQuotes #-}
import Data.String.Interpolate (i)
main :: IO ()
main = do
let name = "world"
let greeting = [i|Hello, #{name}!|]
putStrLn greeting
เรียกใช้:
Hello, world!
ภาพรวมลึกซึ้ง
ในอดีต, Haskell ไม่มีการแทรกตัวแปรลงในสตริงมาแต่อย่างใด มันเป็นคุณสมบัติที่พบในภาษาสคริปต์มากกว่า การแทรกตัวแปรทำได้ง่ายขึ้นใน Haskell ด้วยการพัฒนาของ quasiquoters ซึ่งช่วยให้คุณกำหนดไวยากรณ์ของตัวเอง—เช่น i
ของเราสำหรับการแทรกสตริง
มีทางเลือกอื่นหรือไม่? แน่นอน, ใช้ printf
จาก Text.Printf
, หรือต่อสตริงและตัวแปรด้วย ++
แต่วิธีเหล่านี้ขาดความเรียบง่ายและสะดวกของการแทรกตัวแปร
ในแง่ของการนำไปใช้, interpolate
แปลงสตริงที่ได้รับการแทรกตัวแปรของคุณเป็นสตริงฮาสเกลปกติที่เวลาคอมไพล์โดยใช้ Template Haskell, ดังนั้นจึงไม่มีการกระทบต่อประสิทธิภาพเมื่อเรียกใช้โค้ดของคุณ มันเป็นวิธีที่ชาญฉลาดและสะอาด, เหมือนฮาสเกลเอง
ดูเพิ่มเติม
- Hackage - แพ็คเกจ interpolate
- Hackage - โมดูล Text.Printf
- Haskell Wiki - Quasiquotation
- สำหรับการจัดแม่แบบที่หลากหลาย, ตรวจสอบ Hackage - แม่แบบ Mustache