2015-12-21 4 views

ответ

2

При написании float32 a вы используете функцию Microsoft.FSharp.Core.Operators.float32, которая делает явное преобразование в одноточечный поплавок без единиц.

Если вы хотите, чтобы подобное использование floatType, можно добавить следующее к определениям:

let inline floatType a = float32 a 

Теперь ваш код должен работать.

+0

На самом деле в этом случае вы маскируете ** аббревиатуру типа 'floatType' с новым определением типа функции' floatType', который возвращает 'float32' – Petr

+0

@Petr. Он больше не замаскирован, чем float32, не так ли? Аннотации типа будут по-прежнему работать, поскольку компилятор отличает использование как тип. Есть ли ситуация, в которой 'float32' будет работать, но' floatType' не будет, после обоих определений? – Vandroiy

+0

Да, вы правы. Виноват – Petr

4

Да, вы можете использовать псевдоним типа для кастинга, но вы не выполняете кастинг, это не синтаксис для кастинга. В вашем примере вы используете explicit conversion.

Casting это другое дело, это "новообращенных" в супер-класса (до-литье) или подклассу (понижающего литье), увидеть эту модификацию вашего примера:

type floatType = float32 
let a = box 5.0f 
let b = a :?> float32 
let b' = a :?> floatType 

Это пример - отбрасывание вниз, и, как вы видите, оно работает с псевдонимом.

Так что невозможно отличить от float до float32, даже без аннотаций типа.

Смежные вопросы