Имеет ли D достаточно выразительную систему типов, чтобы можно было динамически работать? - PullRequest
4 голосов
/ 16 марта 2012

Имеет ли D достаточно экспрессивную систему типов , позволяющую работать динамически (то есть с несколькими классами значений) в рамках статически типизированной структуры ?

Я спрашиваю послечтение Динамические языки являются статическими языками. Пример кода, если таковой имеется, высоко ценится.

1 Ответ

9 голосов
/ 16 марта 2012

Если вы используете только std.variant.Variant, то D - это язык с динамической типизацией.Вот пример его использования со справочной страницы библиотеки:

Variant a; // Must assign before use, otherwise exception ensues

// Initialize with an integer; make the type int
Variant b = 42;
assert(b.type == typeid(int));

// Peek at the value
assert(b.peek!(int) !is null && *b.peek!(int) == 42);

// Automatically convert per language rules
auto x = b.get!(real);

// Assign any other type, including other variants
a = b;
a = 3.14;
assert(a.type == typeid(double));

// Implicit conversions work just as with built-in types
assert(a > b);

// Check for convertibility
assert(!a.convertsTo!(int)); // double not convertible to int

// Strings and all other arrays are supported
a = "now I'm a string";
assert(a == "now I'm a string");
a = new int[42]; // can also assign arrays
assert(a.length == 42);
a[5] = 7;
assert(a[5] == 7);

// Can also assign class values
class Foo {}
auto foo = new Foo;
a = foo;
assert(*a.peek!(Foo) == foo); // and full type information is preserved
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...