Ayrat
в классах
Vasily
А
Vasily
Ты про такое поле
Ayrat
я про ПОЛЕ
Ayrat
:D
Vasily
ТЕОРИЯ ПОЛЯ
Ayrat
не про пропертю
Ayrat
просто у меня закрадывается подозрение что НИКАК не объявить ПОЛЕ в абстрактном классе на F#
Vasily
Только как мембер
Vasily
Приватный
Vasily
val скорее всего не сработает
Vasily
Он для пропертей
Vasily
Как я помню
Ayrat
не, пропетря через member пишутся
Vasily
open System
[<AbstractClass>]
type C() =
let mutable m=""
member this.M() = ()
Ayrat
а вот val как раз для неициализированных ПОЛЕЙ
Vasily
Такс, ты заставляешь меня в спеку лезть
Vasily
val только для пропертей
Ayrat
проперя это было бы {get; set; }
Vasily
Это let mutable
Ayrat
и оно на F# пишется там member __.Bar = 0 with get, set
Vasily
Публичное через member
Vasily
member val...
Vasily
И потом default val
Ayrat
так так та
Ayrat
пододжи, я попробую
Ayrat
тут слишком много ключевых слов друг на друге
Vasily
type MyBase () =
abstract Property : string with get, set
default val Property = “default” with get, set
Ayrat
подожди, это ПРОПЕРТИ
Ayrat
а не ПОЛЕ :D
Nikolay
Мне сказали, что у меня диплом херня :(
Vasily
Ну как-то я в f# полей не видел
Ayrat
Vasily
Nikolay
Nikolay
Просто я проводил исследование
Ayrat
Воды мало налил
type [<Struct>] Worker =
val mutable WorkStack: Work
val mutable Handler: Handler
Nikolay
А надо было хз что
Ayrat
@vshapenko вот это структура с двумя ПОЛЯМИ
Ayrat
заметь, никакой иницализации они не требуют
Ayrat
собсно там и класс точно так же можно сделать
Nikolay
Ayrat
т.е. обычный класс
Vasily
type X =
val a : (unit -> string)
val mutable b : string
new() as x = { a = (fun () -> x.b); b = "b" }
Ayrat
просто атрибут убираем и работает
Vasily
Примеры из спеки
Ayrat
Да, а теперь надо абстрактный класс, в котором есть одно ПОЛЕ
Ayrat
:D
Ayrat
т.е. это не абстрактное поле, его будут наследовать все прочие типы
Ayrat
оно не переопределямое
Vasily
open System
[<AbstractClass>]
type X =
val mutable b : string
new() = { b = "b" } КАК ТЕБЕ ТАКОЕ, ИЛОН МАСК?
Ayrat
БЛЯ
Ayrat
ТОЧНО
Ayrat
можно конструктор сбоку намазать
Vasily
А все почему
Ayrat
спека?
Vasily
Угу
Ayrat
красавец, не спорю
Vasily
Просто привыкли конструктор мазать после имени типа
Ayrat
да, привык, конпилятор меня нахер посылал регулярно
Vasily
А можно через Object expression
Vasily
В спеке это раздел 8.6.3
Vasily
Еще можно так обмазаться: type TypeWithADefaultMutableBooleanField =
[<DefaultValue>]
static val mutable ready : bool
Ayrat
ну да, тоже норм
Vasily
Но это в теории только для интеропа может пригодиться с с#
Ayrat
Я подспудно думаю что филды быстрее пропертей.
Ayrat
но вероятно жид инлайнит вызов гетеров
Vasily
Вероятно
Vasily
type 'a ``[]`` with
member x.GetOrDefault(n) =
if x.Length > n then x.[n]
else Unchecked.defaultof<'a>
let arrlist = [| 1; 2; 3 |]
arrlist.GetOrDefault(1) //2
150
arrlist.GetOrDefault(4) //0
Vasily
А вот это вот реальная магия
Ayrat
Так это ж тайп экстеншн через обратную запись типов.
Vasily
Меня восхитило ``[]``
Ayrat
кстати не знал что он прям так и назван
Pavel
Ayrat
сомнительно
мы вступаем на шаткое поле предположений.
Pavel
кажется jit их выпиливает
Pavel
Сайм на эту тему пыхтел както