Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
{1, 2, 3}— это что? Массив из трех целых? Структура из трех целых? Список (list)? Множество (set)? Что-то еще?
struct Foo {
string str;
int i;
boolean b;
}
struct Bar {
string name;
int k;
boolean c;
}
Foo f;
Bar b;
f = b; // error
b = f; // error
f = {"hello", 10, true}; // ok
b = {"hello", 10, true}; // ok
{string, int, boolean} t1 = {"hello", 10, true}; // ok
{string, int, boolean} t2 = f; // ok
{string, int, boolean} t3 = b; // ok
var
a: real;
begin
a := 10;
end;
Объявите сначала тип, потом создайте две структуры этого типа и присваивайте наздоровье.
var
a: real;
b: byte;
begin
a := 10;
b := 10;
end;
var
a: record
i1: real;
i2: real;
end;
b: record
i1: byte;
i2: byte;
end;
begin
a := (i1:10; i2:10);
b := (i1:10; i2:10);
end;
f = {"hello", 10, true}; // ok
b = {"hello", 10, true}; // ok
Даже не знаю как до вас достучаться. Не имеет никакого значения какого типа число 10, это была иллюстрация вот к этому примеру:
Foo f;
Bar b;
f = b; // error
b = f; // error
Я же вам наглядно уже не первый пост пытаюсь показать, что {«hello», 10, true} <> {«hello», 10, true}, это совершенно разные данные,
struct Foo {
string str;
int i;
boolean b;
}
struct Bar {
string name;
int k;
boolean c;
}
это не одна сущность «кортеж», это два разных набора данных, по случаю совпавших и приводятся они в каждом конкретном случае именно потмоу, что это данные и их тип определён в левой части, а не в самих данных.
Можно считать, что кортеж — это структура с ограничениями, для которой определена операция приведения, в случае, если все поля — тех же типов и следуют в том же порядке.
Но я выбрал несколько другую точку зрения, более близкую к внутреннему устройству компилятора, и с этой точки зрения кортеж — скорее «полуфабрикат», заготовка для «полноценного» типа.
Так например, список аргументов функции — это тип? Обычно нет (сама сигнатура функции — тип, но не отдельно список аргументов). Но при этом вполне можно сказать что список аргументов функции — это кортеж.
В принципе, «можно считать» как угодно. Ктож нам запретит :-) Вопрос только: какой в этом смысл?! С тем же успехом я могу утверждать что это структура — это кортеж специального вида. И я даже знаю язык в котором это действительно так :-)
Point3D pt{10,20,30}; // новый синтаксис инициализации Point3D foo(Point3D a) { return {1, 2, 3}; // возвращаем "кортеж" } foo( {3,2,1} ); // передаем "кортеж"
set {a, b} to {b, a}
set exampleList to {213.1, 6, «Julia, the actress», 8.5}
Кортежи в языках программирования. Часть 1