Lập trình D - Tuples
Các bộ giá trị được sử dụng để kết hợp nhiều giá trị như một đối tượng duy nhất. Tuples chứa một chuỗi các phần tử. Các phần tử có thể là kiểu, biểu thức hoặc bí danh. Số lượng và các phần tử của một tuple được cố định tại thời điểm biên dịch và chúng không thể thay đổi tại thời điểm chạy.
Tuples có đặc điểm của cả cấu trúc và mảng. Các phần tử tuple có thể thuộc nhiều loại khác nhau như cấu trúc. Các phần tử có thể được truy cập thông qua lập chỉ mục như mảng. Chúng được triển khai như một tính năng thư viện bởi mẫu Tuple từ mô-đun std.typecons. Tuple sử dụng TypeTuple từ mô-đun std.typetuple cho một số hoạt động của nó.
Tuple Sử dụng tuple ()
Tuple có thể được xây dựng bởi hàm tuple (). Các thành viên của một tuple được truy cập bằng các giá trị chỉ mục. Một ví dụ đã được biểu diễn ở dưới.
Thí dụ
import std.stdio;
import std.typecons;
void main() {
auto myTuple = tuple(1, "Tuts");
writeln(myTuple);
writeln(myTuple[0]);
writeln(myTuple[1]);
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
Tuple!(int, string)(1, "Tuts")
1
Tuts
Tuple bằng Tuple Template
Tuple cũng có thể được tạo trực tiếp bởi mẫu Tuple thay vì hàm tuple (). Loại và tên của mỗi thành viên được chỉ định là hai tham số mẫu liên tiếp. Có thể truy cập các thành viên theo thuộc tính khi được tạo bằng các mẫu.
import std.stdio;
import std.typecons;
void main() {
auto myTuple = Tuple!(int, "id",string, "value")(1, "Tuts");
writeln(myTuple);
writeln("by index 0 : ", myTuple[0]);
writeln("by .id : ", myTuple.id);
writeln("by index 1 : ", myTuple[1]);
writeln("by .value ", myTuple.value);
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau
Tuple!(int, "id", string, "value")(1, "Tuts")
by index 0 : 1
by .id : 1
by index 1 : Tuts
by .value Tuts
Mở rộng các tham số thuộc tính và chức năng
Các thành viên của Tuple có thể được mở rộng bằng thuộc tính .expand hoặc bằng cách cắt. Giá trị mở rộng / cắt lát này có thể được chuyển dưới dạng danh sách đối số hàm. Một ví dụ đã được biểu diễn ở dưới.
Thí dụ
import std.stdio;
import std.typecons;
void method1(int a, string b, float c, char d) {
writeln("method 1 ",a,"\t",b,"\t",c,"\t",d);
}
void method2(int a, float b, char c) {
writeln("method 2 ",a,"\t",b,"\t",c);
}
void main() {
auto myTuple = tuple(5, "my string", 3.3, 'r');
writeln("method1 call 1");
method1(myTuple[]);
writeln("method1 call 2");
method1(myTuple.expand);
writeln("method2 call 1");
method2(myTuple[0], myTuple[$-2..$]);
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
method1 call 1
method 1 5 my string 3.3 r
method1 call 2
method 1 5 my string 3.3 r
method2 call 1
method 2 5 3.3 r
TypeTuple
TypeTuple được định nghĩa trong mô-đun std.typetuple. Danh sách giá trị và loại được phân tách bằng dấu phẩy. Dưới đây là một ví dụ đơn giản sử dụng TypeTuple. TypeTuple được sử dụng để tạo danh sách đối số, danh sách mẫu và danh sách mảng chữ.
import std.stdio;
import std.typecons;
import std.typetuple;
alias TypeTuple!(int, long) TL;
void method1(int a, string b, float c, char d) {
writeln("method 1 ",a,"\t",b,"\t",c,"\t",d);
}
void method2(TL tl) {
writeln(tl[0],"\t", tl[1] );
}
void main() {
auto arguments = TypeTuple!(5, "my string", 3.3,'r');
method1(arguments);
method2(5, 6L);
}
Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:
method 1 5 my string 3.3 r
5 6