ภาษา Q - ประเภทการหล่อ
มักจะต้องเปลี่ยนประเภทข้อมูลของข้อมูลบางประเภทจากประเภทหนึ่งไปเป็นอีกประเภทหนึ่ง ฟังก์ชันการหล่อมาตรฐานคือ“ $”dyadic operator.
ใช้สามวิธีในการส่งจากประเภทหนึ่งไปยังอีกประเภทหนึ่ง (ยกเว้นสตริง) -
- ระบุประเภทข้อมูลที่ต้องการตามชื่อสัญลักษณ์
- ระบุประเภทข้อมูลที่ต้องการตามอักขระ
- ระบุประเภทข้อมูลที่ต้องการโดยใช้ค่าสั้น
การหล่อจำนวนเต็มเพื่อลอยตัว
ในตัวอย่างต่อไปนี้ของการหล่อจำนวนเต็มเพื่อลอยวิธีการหล่อทั้งสามแบบจะเทียบเท่ากัน -
q)a:9 18 27
q)$[`float;a] / Specify desired data type by its symbol name, 1st way
9 18 27f
q)$["f";a] / Specify desired data type by its character, 2nd way
9 18 27f
q)$[9h;a] / Specify desired data type by its short value, 3rd way
9 18 27f
ตรวจสอบว่าการดำเนินการทั้งสามเทียบเท่ากันหรือไม่
q)($[`float;a]~$["f";a]) and ($[`float;a] ~ $[9h;a])
1b
การหล่อสตริงเป็นสัญลักษณ์
การแคสต์สตริงเป็นสัญลักษณ์และในทางกลับกันจะทำงานแตกต่างกันเล็กน้อย ลองตรวจสอบด้วยตัวอย่าง -
q)b: ("Hello";"World";"HelloWorld") / define a list of strings
q)b
"Hello"
"World"
"HelloWorld"
q)c: `$b / this is how to cast strings to symbols
q)c / Now c is a list of symbols
`Hello`World`HelloWorld
ความพยายามที่จะโยนสตริงเป็นสัญลักษณ์โดยใช้คำสำคัญ `สัญลักษณ์หรือ 11h จะล้มเหลวด้วยข้อผิดพลาดประเภท -
q)b
"Hello"
"World"
"HelloWorld"
q)`symbol$b
'type
q)11h$b
'type
การแคสต์สตริงเป็นไม่ใช่สัญลักษณ์
การแคสต์สตริงไปยังประเภทข้อมูลอื่นที่ไม่ใช่สัญลักษณ์ทำได้ดังนี้ -
q)b:900 / b contain single atomic integer
q)c:string b / convert this integer atom to string “900”
q)c
"900"
q)`int $ c / converting string to integer will return the
/ ASCII equivalent of the character “9”, “0” and
/ “0” to produce the list of integer 57, 48 and
/ 48.
57 48 48i
q)6h $ c / Same as above
57 48 48i
q)"i" $ c / Same a above
57 48 48i
q)"I" $ c
900i
ดังนั้นเพื่อโยนสตริงทั้งหมด (รายการอักขระ) ไปยังอะตอมเดียวของชนิดข้อมูล x กำหนดให้เราต้องระบุอักษรตัวพิมพ์ใหญ่ที่แสดงถึงชนิดข้อมูล x เป็นอาร์กิวเมนต์แรกของ $ตัวดำเนินการ หากคุณระบุประเภทข้อมูลของx ในทางอื่นก็ส่งผลให้การแคสต์ถูกนำไปใช้กับอักขระแต่ละตัวของสตริง