Ngôn ngữ Q - Truyền kiểu

Thường phải thay đổi kiểu dữ liệu của một số dữ liệu từ kiểu này sang kiểu khác. Chức năng truyền tiêu chuẩn là “$”dyadic operator.

Ba cách tiếp cận được sử dụng để truyền từ kiểu này sang kiểu khác (ngoại trừ chuỗi) -

  • Chỉ định kiểu dữ liệu mong muốn bằng tên ký hiệu của nó
  • Chỉ định kiểu dữ liệu mong muốn theo ký tự của nó
  • Chỉ định kiểu dữ liệu mong muốn bằng giá trị ngắn.

Truyền số nguyên sang số nổi

Trong ví dụ sau về ép kiểu số nguyên thành float, cả ba cách truyền khác nhau đều tương đương:

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

Kiểm tra xem tất cả ba hoạt động có tương đương nhau không,

q)($[`float;a]~$["f";a]) and ($[`float;a] ~ $[9h;a])
1b

Truyền chuỗi thành biểu tượng

Truyền chuỗi sang biểu tượng và ngược lại hoạt động hơi khác một chút. Hãy kiểm tra nó với một ví dụ -

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

Cố gắng truyền chuỗi tới các ký hiệu bằng cách sử dụng các từ được khóa `ký hiệu hoặc 11h sẽ không thành công với lỗi loại -

q)b
"Hello"
"World"
"HelloWorld"

q)`symbol$b
'type

q)11h$b
'type

Truyền chuỗi sang không ký hiệu

Truyền chuỗi sang một kiểu dữ liệu khác với ký hiệu được thực hiện như sau:

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

Vì vậy, để truyền toàn bộ một chuỗi (danh sách các ký tự) đến một nguyên tử duy nhất của kiểu dữ liệu x yêu cầu chúng tôi chỉ định chữ hoa đại diện cho kiểu dữ liệu x là đối số đầu tiên cho $nhà điều hành. Nếu bạn chỉ định kiểu dữ liệu củax theo bất kỳ cách nào khác, nó dẫn đến việc ép kiểu được áp dụng cho mỗi ký tự của chuỗi.