Size: a a a

2021 April 22

MS

Michael Snytko in F# Chat
я вот так сделал в итоге
источник

PD

Prunkles Dreemurr in F# Chat
Исходя из данного примера, это можно обобщить следующим образом:
let createField<'T> () =
 let value = Extensible.GetValue<'T>(ext, field.Number)
 { Name = field.Name; Value = value; Index = field.Number }
match typeOfField with
| FieldDescriptorProto.Type.TypeString -> createField<string> ()
| FieldDescriptorProto.Type.TypeInt32 -> createField<int32> ()

Если хочется короче, то, как уже сказали, можно только через Map<FieldDescriptorProto.Type, Type>
источник

AH

Ayrat Hudaygulov in F# Chat
можно еще короче если замкнуть в функции ext и field.Number
источник

AH

Ayrat Hudaygulov in F# Chat
вот как у @Prunkles
источник

AH

Ayrat Hudaygulov in F# Chat
>Меньше, как уже сказали, можно только через Map<FieldDescriptorProto.Type, Type>

но
меньше не будет
источник

AH

Ayrat Hudaygulov in F# Chat
тебе придется точно так же описать МАПИНГ
источник

AH

Ayrat Hudaygulov in F# Chat
просто в другом месте, раздув код
источник

PD

Prunkles Dreemurr in F# Chat
А, ну да. Зато будет короче на месте использования :)
источник

AH

Ayrat Hudaygulov in F# Chat
зато +1 непонятная сущность в которую надо навигироваться чтобы понять чо происходит
источник

AH

Ayrat Hudaygulov in F# Chat
если она переиспользуется, наверное имеет смысл. Если нет - не имеет
источник

PD

Prunkles Dreemurr in F# Chat
На самом деле, если считать по кол-ву символов, то, возможно, такая запись будет и короче:

let typeMappings = Map.ofSeq [ TypeString, typeof<string>; TypeInt32, typeof<int32>; … ]
createField typeMappings.[typeOfField]

, но зочем?
источник

AH

Ayrat Hudaygulov in F# Chat
к слову есть просто функция map
источник

AH

Ayrat Hudaygulov in F# Chat
и даже dict
источник

PD

Prunkles Dreemurr in F# Chat
А, точно. Я сначала попытался map, но её не было. Забыл про dict
источник

g

gsomix in F# Chat
Работает правильно. Но ты в bind делаешь мемоизацию. Что ты ожидаешь?
источник

VP

Vladislav Podporkin in F# Chat
Мемоизирую результат binder'а, да. И это в целом то поведение, которое я ожидаю. Но на этом ломается рекурсия (в том числе "хвостовая"). Не то чтобы меня это смущает, но ей часто пользуются, поэтому хотелось бы с этим разобраться.
источник

g

gsomix in F# Chat
Хвостовая рекурсия не ломается в этом случае.
источник

VP

Vladislav Podporkin in F# Chat
Я про то, что такие записи не будут работать. И только про это.
Хоть это и не сама хвостовая рекурсия, а нечто похожее.
источник

g

gsomix in F# Chat
Это хвостовая рекурсия. :)
источник

VP

Vladislav Podporkin in F# Chat
А это не хвостовая рекурсия получается ?
источник