Очень новое для sml. Моя проблема в том, что я пытаюсь создать свой собственный тип данных, но я не могу использовать целые числа в соглашении об именах элементов, которые являются частью типа данных.
datatype psu = 350w | 450w | 550w | ... etc;
выброшена ошибка:
stdIn:16.15-16.30 Error: syntax error: deleting STRING BAR STRING
Есть ли способ преобразовать эти числа в строку, которая будет приемлема для интерпретатора sml? Я действительно не хочу называть свою переменную «триста пятьдесят ватт» или что-то в этом роде.
Я попытался найти toString и просто сделать переменные явно строками, но я не смог найти полезную toString, и создание строк переменных просто выдало еще одну ошибку.
Кстати: это определение не приводит к этой ошибке. Ваше фактическое определение сказало datatype psu = "350w" | "450w" | ...
. Я думаю, вы были настолько сосредоточены на строках, что застряли в них как в решении, но это редко.
Даже я собирался предложить это..datatype psu = W350 | W450 | W550 | ...
Как отмечено в комментариях, идентификаторы в SML (как и во многих других языках программирования) не могут начинаться с цифр.
datatype psu = W350 | W450 | W550 | ...
Это сработает.
Что-то вроде следующего также будет работать, но не позволяет вам ограничивать возможности.
datatype psu = Watts of int
Точно так же, если вы представляете это значение в виде строки, такой как "350W"
, вы не можете гарантировать во время компиляции, что значение, хранящееся в этой строке, находится в определенном наборе параметров.
Я не знал, что идентификаторы в sml не могут начинаться с цифр. Думаю, я буду использовать стиль W350 для своей программы. Благодарю вас!
Идентификатор не может начинаться с цифры. Что не так с
datatype psu = W350 | W450 | W550 | ...
илиdatatype psu = Watts of int
? Что представляет собой этот тип и как вы собираетесь его использовать?