Какое использование вы можете придумать для соединений Perl 6? - PullRequest
14 голосов
/ 19 сентября 2008

Больше информации от в Perl 6, статья в Википедии

Развязка

В Perl 6 вводится концепция соединений: значения, которые являются составной частью других значений. [24] В первые дни разработки Perl 6 их называли «суперпозициями», по аналогии с концепцией квантовой физики квантовых суперпозиций - формами волн, которые могут одновременно занимать несколько состояний, пока наблюдение не «свернет» их. Модуль Perl 5, выпущенный Дамианом Конвеем в 2000 году под названием Quantum :: Superpositions [25], обеспечил первоначальное доказательство концепции. Хотя поначалу такие суперпозиционные значения казались просто программным любопытством, со временем их полезность и интуитивность стали широко признаваться, а соединения теперь занимают центральное место в дизайне Perl 6.

В простейшем виде соединения создаются путем объединения набора значений с операторами соединения:

my $any_even_digit = 0|2|4|6|8; # any(0, 2, 4, 6, 8)
my $all_odd_digits = 1&3&5&7&9; # all(1, 3, 5, 7, 9)

| указывает значение, равное его левому или правому аргументу. & указывает значение, равное как левому, так и правому аргументам. Эти значения могут использоваться в любом коде, который будет использовать нормальное значение. Операции, выполняемые на соединении, действуют одинаково на всех элементах соединения и объединяются в соответствии с оператором соединения. Таким образом, ("яблоко" | "банан") ~ "s" приведет к "яблкам" | "бананам". В сравнениях, соединения возвращают один истинный или ложный результат для сравнения. «Любые» соединения возвращают значение «истина», если сравнение истинно для любого из элементов соединения. «все» соединения возвращают значение «истина», если сравнение истинно для всех элементов соединения.

Соединения могут также использоваться для более полного расширения системы типов путем введения стиля общего программирования, ограниченного соединениями типов:

sub get_tint ( RGB_Color|CMYK_Color $color, num $opacity) { ... }
sub store_record (Record&Storable $rec) { ... }

Ответы [ 3 ]

11 голосов
/ 23 сентября 2008

Сколько дней в данном месяце?

given( $month ){
  when any(qw'1 3 5 7 8 10 12') {
    $day = 31
  }
  when any(qw'4 6 9 11') {
    $day = 30
  }
  when 2 {
    $day = 29
  }
}
6 голосов
/ 23 сентября 2008

Наиболее привлекательной особенностью соединений является то, что вам не нужно писать много тестов кода для сложных ситуаций. Вы описываете ситуацию с развязками, затем применяете тест. Вы думаете не о том, как получить ответ (например, с помощью операторов короткого замыкания или блоков), а о том, какой вопрос вы задаете.

5 голосов
/ 23 сентября 2008

Автозаказ звучит круто, хотя я не знаю, каково его текущее состояние.

for all(@files) -> $file {
    do_something($file);
}

Соединения не имеют порядка, поэтому виртуальная машина может создавать потоки для каждого элемента в @files и обрабатывать их все параллельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...