LINUX.ORG.RU

Может имеется в виду возможность помечать аргументы как in и out? Я интересовался D давно, но плотно с ним не работал.

DELIRIUM ☆☆☆☆☆ ()
Ответ на: комментарий от DELIRIUM

Этот текст ввёл меня в ступор:

Inout может использоваться как для параметров, так и для возвращаемых типов функций. Это похоже на шаблон для квалификаторов изменяемости, const и immutable. Атрибут изменяемости выводится из параметра. Значит, inout переносит выведенный атрибут изменяемости на возвращаемый тип. Ниже показан простой пример, показывающий, как меняется квалификатор изменяемости.

import std.stdio;

inout(char)[] qoutedWord(inout(char)[] phrase) { 
   return '"' ~ phrase ~ '"';
}

void main() { 
   char[] a = "проверка a".dup; 

   a = qoutedWord(a); 
   writeln(typeof(qoutedWord(a)).stringof," ", a);  

   const(char)[] b = "проверка b"; 
   b = qoutedWord(b); 
   writeln(typeof(qoutedWord(b)).stringof," ", b); 

   immutable(char)[] c = "проверка c"; 
   c = qoutedWord(c); 
   writeln(typeof(qoutedWord(c)).stringof," ", c); 
} 

Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:

char[] "проверка a"
const(char)[] "проверка b"
string "проверка c"
russian-turist-2019 ()
Ответ на: комментарий от russian-turist-2019

Как я понял, это такой эрзац-вывод типов. Только выводится не весь тип, а константность/неконстантность. Т.е., атрибуты (const, immutable и т.п.) переносятся с типа аргумента функции на возвращаемый тип.

Esper ()
Ответ на: комментарий от russian-turist-2019

Я не эксперт D, тоже вскользь изучал. Но наверно это полезно в ситуациях как в твоем примере, когда в const(char)[] пишется соответствующий константный тип, вместо не константного, что вероятно привело бы к ошибке.

SR_team ★★★★★ ()
Ответ на: комментарий от russian-turist-2019

Фиг знает. Я бы на твоём месте вообще не заморачивался.

Esper ()
Ответ на: комментарий от russian-turist-2019

почитай про inout в Fortran, там похожая на вид штука есть для контроля переменных. Но смущает, что inout применяется именно к функции

grem ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.