因此;这段代码编译得很好(虽然我不建议运行它......):
let rec firstFunc () =
secondFunc ()
and secondFunc () =
firstFunc ()
但是!此代码不会:
let rec firstFunc () =
secondFunc ()
[<CompiledName "SecondFunc">]
and secondFunc () =
firstFunc ()
有没有办法解决这个限制?
答案 0 :(得分:7)
您可以在and
之后添加该属性,它似乎可以正常编译。
let rec firstFunc () =
secondFunc ()
and [<CompiledName "SecondFunc">] secondFunc () =
firstFunc ()
答案 1 :(得分:2)
如果您只需要一个函数的CompiledName属性,而不是两个函数,您可以这样做:
[<CompiledName "SecondFunc">]
let rec secondFunc () =
firstFunc ()
and firstFunc () =
secondFunc ()
但是如果你需要它,我还没有找到解决方案。
要跟进Pierre Irrmann的回答,如果您希望在单独的一行中看到您的属性,您还可以执行以下操作:
let rec firstFunc () =
secondFunc ()
and [<CompiledName("SecondFunction")>]
secondFunc () =
firstFunc ()
甚至:
let rec firstFunc () =
secondFunc ()
and
[<CompiledName("SecondFunction")>]
secondFunc () =
firstFunc ()
唯一的要求是secondFunc ()
声明及其属性必须缩进至少一个空格。所以即使这样也可行:
let rec firstFunc () =
secondFunc ()
and
[<CompiledName("SecondFunction")>]
secondFunc () =
firstFunc ()
但是,我并不特别推荐最后一个选项。我测试了它并且它有效,但看起来很难看。最好缩进整个缩进级别(四个或两个空格,无论你使用什么),而不是让#34;可爱&#34;并在这种情况下缩进一个空格。
答案 2 :(得分:1)
到目前为止,我设法提出的最好成绩是:
let rec firstFunc () =
fakeSecondFunc ()
and fakeSecondFunc () =
firstFunc ()
[<CompiledName "SecondFunc">]
let secondFunc () =
fakeSecondFunc ()