Я хочу преобразовать строковое представление реального числа в реальный тип. Я знаю, что могу сделать Real.fromString("5.5")
, но он не возвращает реальный тип, но реальный тип опции, который я не могу размножать или добавлять с помощью каких-либо других реальных.Преобразование строки в реальную в SML
ответ
Извлечь значение из опции путем сопоставления с образцом или использовать одну из функций в структуре Option. Например:
- val x = Real.fromString("5.5");
> val x = SOME 5.5 : real option
- Option.getOpt(x, 0.0);
> val it = 5.5 : real
Чтобы добавить в ответ Майкл Дж Барбер, тип параметра является алгебраическим типом данных, который является либо НЕКОТОРЫМ что-то, или NONE.
Обычно в ML мы обычно деконструкция алгебраических типов данных с сопоставлением с образцом:
case Real.fromString "5.5" of SOME x => x + 1.0
| NONE => 42.0;
Вы можете использовать getOpt
как Майкл Дж Barber предложил (вы на самом деле не нужны Option.
поскольку getOpt
находится в Топ- уровня), что является упрощенной версией выше.
Или, если вы уверены, что он собирается быть какой-то, вы могли бы использовать valOf
(который будет ошибка, если она не является NONE):
- val x = Real.fromString "5.5";
val x = SOME 5.5 : real option
- valOf x;
val it = 5.5 : real
или вы могли бы шаблону соответствовать его прочь в val
(начиная с val
также является совпадением рисунка, хотя и с одной веткой):
- val SOME x = Real.fromString "5.5";
> val x = 5.5 : real