Могу ли я функционально объединить число и строку? - PullRequest
6 голосов
/ 05 февраля 2012

Я пытаюсь сделать чистую функцию, которая встраивает число в строку. Очевидные методы конкатенации не работают:

pure string foo(immutable int bar)
{
    return "Number: " ~ bar; // Error: strings and ints are incompatible.
    return "Number: " ~ to!string(bar); // Error: to() is impure.
}

Есть ли чистый, функциональный способ объединения числа и строки? Я бы не хотел писать свою собственную функцию конкатенации или преобразования, но я сделаю это, если придется.

1 Ответ

4 голосов
/ 05 февраля 2012

Это, кажется, давняя проблема с до! .(См. этот отчет об ошибках.)

Насколько я могу судить, в Фобосе нет подходящих чистых функций.Боюсь, что вы сами по себе.


Редактировать с ОП: Я использовал такую ​​функцию, чтобы конвертировать uints в strings.

import std.math: log10;

pure string convert(uint number)
{
    string result;
    while (log10(number) + 1 >= 1)
    {
        immutable uint lastDigit = number % 10;
        result = cast(char)('0' + lastDigit) ~ result;
        number /= 10;
    }
    return result;
}
...