nic*_*las 1 f# initialization mutable option
你知道如何在下面初始化变量ret吗?
type ReferenceDataResponse =
{ ResponseError : ResponseError option
SecurityDatas : SecurityData array option }
let ToReferenceDataResponse(elem:Bloomberglp.Blpapi.Element) =
let ret = { ResponseError = null ; SecurityDatas = null }
if elem.HasElement("ResponseError") then
...
end
Run Code Online (Sandbox Code Playgroud)
ps:我想我已经以某种方式声明我的记录值是可变的
更新:
正如评论中所提到的,我之前在我的代码中使用过None:
type ZeroOrMany<'a> =
| Many of 'a array
| None
Run Code Online (Sandbox Code Playgroud)
这为符号'None'创建了一个新的定义,它隐藏了我试图在这里引用的"Option.None".
要创建空记录,您可以使用None:
let ret = { ResponseError = None; SecurityDatas = None }
Run Code Online (Sandbox Code Playgroud)
我认为您不想将该记录声明为可变.相反,您可能希望创建一个包含某个字段的新值的克隆(即ResponseCode).例如,如果你有一个解析它的函数ResponseError,你会写如下:
// Start with an empty record that does not contain anything
let ret = { ResponseError = None; SecurityDatas = None }
// Add ResponseError if it is defined
let ret1 =
if elem.HasElement("ResponseError") then
let responseErr = ParseResponseError (elem.GetElement("ResponseError"))
// Return a new value, with ResponseError set
{ ret with ResponseError = Some(responseErr) }
else
// Response error was not set, so we just return the original
ret
Run Code Online (Sandbox Code Playgroud)
如果您确实需要可变记录,那么您可以将该字段标记为mutable,但不经常使用 - 如果您正在学习函数式编程,那么尝试保持可变性 - 这样,您将学习如何以不同方式思考问题.//在这里做更多事情 - 也许返回最终结果ret1