Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 从函数F返回null#_.net_F#_Xamarin.ios - Fatal编程技术网

.net 从函数F返回null#

.net 从函数F返回null#,.net,f#,xamarin.ios,.net,F#,Xamarin.ios,我正在尝试在F#中实现以下Swift方法: 问题是F#中的每个块都需要一个返回值,因此我不能直接从if块返回,因为这将被视为if块的返回值,而不是整个函数的返回值。为了克服这个问题,我创建了初始化为null的returnController变量,然后在函数末尾返回它。这是在F#中处理此类用例的正确方法吗?使用可变返回变量在这里没有帮助。在F#中,内置类型不可为空,但.NET/C#类可为空,例如string。可以在不同的分支中返回null或字符串。这包括: if true then ""

我正在尝试在F#中实现以下Swift方法:


问题是
F#
中的每个块都需要一个返回值,因此我不能直接从if块返回,因为这将被视为if块的返回值,而不是整个函数的返回值。为了克服这个问题,我创建了初始化为null的
returnController
变量,然后在函数末尾返回它。这是在F#中处理此类用例的正确方法吗?

使用可变返回变量在这里没有帮助。在F#中,内置类型不可为空,但.NET/C#类可为空,例如
string
。可以在不同的分支中返回null或字符串。这包括:

if true then
    ""
else
    null
如果您在F#中定义了自己的类型,则不能为其分配
null

type A = { A : int }

if true then
    { A = 1}
else
    null // Error: The type 'A' does not have 'null' as a proper value
要解决此问题,您需要将您的值包装在
选项中

if true then
    Some { A = 1}
else
    None
现在返回的类型是
选项
选项
值必须显式展开,以便处理
情况:

let x = Some { A = 1 }

match x with
| Some a -> a.A
| None -> 0

UIViewController
类型是MonoTouch和Xamarin.IOS的一部分,代表IOS开发中应用程序的一个活动/类/一个页面。它编译。如果它像字符串那样编译,这仍然可行吗?我认为这是可以为空的,因此您可以只使用空分支,但是您必须确保每个
如果
都有
否则
它不会像我现在设置的那样工作吗?其中唯一的返回值在函数的末尾?是的,它可以工作,但不是必需的。一个更直接的Swift代码端口也应该可以工作。
=不是F#中的运算符。“不等于”是
。但是,Swift代码似乎确实在使用
?。
nil propogation运算符间接检查
flatImages
是否为null。因此,您应该检查
flatImages
是否为空。
flatImages
不能像我设计F#code那样为空,因为它被初始化为空列表。在Swift版本中,它是可选的,因此这里不需要额外的检查。对不起,我应该澄清一下。
if true then
    Some { A = 1}
else
    None
let x = Some { A = 1 }

match x with
| Some a -> a.A
| None -> 0