2012-02-10 2 views
1

Я хочу преобразовать строковое представление реального числа в реальный тип. Я знаю, что могу сделать Real.fromString("5.5"), но он не возвращает реальный тип, но реальный тип опции, который я не могу размножать или добавлять с помощью каких-либо других реальных.Преобразование строки в реальную в SML

ответ

4

Извлечь значение из опции путем сопоставления с образцом или использовать одну из функций в структуре Option. Например:

- val x = Real.fromString("5.5"); 
> val x = SOME 5.5 : real option 
- Option.getOpt(x, 0.0); 
> val it = 5.5 : real 
3

Чтобы добавить в ответ Майкл Дж Барбер, тип параметра является алгебраическим типом данных, который является либо НЕКОТОРЫМ что-то, или 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