169 похожих чатов

Это норма для ФП вообще или тут принято как-то иначе

делать?

type ClassFileBuilder() =
let magic = ClassFileMagic()
let mutable versions: Option<ClassFileVersions> = None
let mutable constantPoolDescriptor: Option<ConstantPoolDescriptor> = None
let mutable accessFlags: Option<u2> = None
let mutable thisClass: Option<u2> = None
let mutable superClass: Option<u2> = None
let mutable interfaceDescriptor: Option<InterfaceDescriptor> = None
let mutable fieldDescriptor: Option<FieldDescriptor> = None
let mutable methodDescriptor: Option<MethodDescriptor> = None
let mutable attributeDescriptor: Option<AttributeDescriptor> = None

member this.SetVersions(value: Option<ClassFileVersions>) =
versions <- value
this

member this.SetConstantPoolDescriptor(value: Option<ConstantPoolDescriptor>) =
constantPoolDescriptor <- value
this

member this.SetAccessFlags(value: Option<uint16>) =
accessFlags <- value
this

member this.SetThisClass(value: Option<uint16>) =
thisClass <- value
this

member this.SetSuperClass(value: Option<uint16>) =
superClass <- value
this

member this.SetInterfaceDescriptor(value: Option<InterfaceDescriptor>) =
interfaceDescriptor <- value
this

member this.SetFieldDescriptor(value: Option<FieldDescriptor>) =
fieldDescriptor <- value
this

member this.SetMethodDescriptor(value: Option<MethodDescriptor>) =
methodDescriptor <- value
this

member this.SetAttributeDescriptor(value: Option<AttributeDescriptor>) =
attributeDescriptor <- value
this

member this.Build() : Result<ClassFile,ClassFileBuilderError> =
match
versions,
constantPoolDescriptor,
accessFlags,
thisClass,
superClass,
interfaceDescriptor,
fieldDescriptor,
methodDescriptor,
attributeDescriptor
with
| Some versions,
Some constantPoolDescriptor,
Some accessFlags,
Some thisClass,
Some superClass,
Some interfaceDescriptor,
Some fieldDescriptor,
Some methodDescriptor,
Some attributeDescriptor ->
Ok
{magic = magic
versions = versions
constant_pool_descriptor = constantPoolDescriptor
access_flags = accessFlags
this_class = thisClass
super_class = superClass
interface_descriptor = interfaceDescriptor
field_descriptor = fieldDescriptor
method_descriptor = methodDescriptor
attribute_descriptor = attributeDescriptor}
| _ ->
let missingFields =
[if versions.IsNone then "versions" else ""
if constantPoolDescriptor.IsNone then
"constantPoolDescriptor"
else
""
if accessFlags.IsNone then "accessFlags" else ""
if thisClass.IsNone then "thisClass" else ""
if superClass.IsNone then "superClass" else ""
if interfaceDescriptor.IsNone then
"interfaceDescriptor"
else
""
if fieldDescriptor.IsNone then "fieldDescriptor" else ""
if methodDescriptor.IsNone then "methodDescriptor" else ""
if attributeDescriptor.IsNone then
"attributeDescriptor"
else
"" ]
|> List.filter(fun field -> field <> "")

Error(MissingField(String.concat ", " missingFields))

2 ответов

85 просмотров

ПЗДЦ

Норма писать как удобно писать.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта