Забавненько
Jun. 12th, 2010 08:54 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Наткнулся в F# на то, что для строки автоматически не делается upcast до объекта, если в описании функции для этого объекта не написать что это flexible type, т.е. вместо obj - #obj.
Flexible type параметр - это пометка, что функция принимает не только значения строго этого типа, а еще и значения с типами потомков. Соответственно, чтобы передавать любой объект в функцию, нужно писать #obj
Соответственно, если этого не написать, то единственный вариант вызова вместо "fun s" будет "fun (upcast s)". Тип оператор upcast автоматически инферится при компиляции.
Причем эта падла не дает этот flexible type использовать в декларациях типов, в спецификации написано что можно использовать только в member declarations.
Flexible type параметр - это пометка, что функция принимает не только значения строго этого типа, а еще и значения с типами потомков. Соответственно, чтобы передавать любой объект в функцию, нужно писать #obj
Соответственно, если этого не написать, то единственный вариант вызова вместо "fun s" будет "fun (upcast s)". Тип оператор upcast автоматически инферится при компиляции.
Причем эта падла не дает этот flexible type использовать в декларациях типов, в спецификации написано что можно использовать только в member declarations.
no subject
Date: 2010-06-12 09:22 pm (UTC)no subject
Date: 2010-06-12 09:31 pm (UTC)no subject
Date: 2010-06-13 04:28 am (UTC)no subject
Date: 2010-06-13 08:15 am (UTC)no subject
Date: 2010-06-13 09:24 am (UTC)no subject
Date: 2010-06-14 06:56 am (UTC)no subject
Date: 2010-06-14 06:57 am (UTC)