【发布时间】:2019-03-13 02:38:45
【问题描述】:
我在 WPF / FsXaml 应用程序中使用以下代码 sn-p:
let groupSelected(e: SelectionChangedEventArgs) =
e.AddedItems
|> Seq.cast<string>
|> Seq.head
|> SelectedGroupChanged
let GroupSelected = groupSelected
当我将鼠标悬停在 groupSelected 上时,Visual Studio 显示以下内容:
val groupSelected: e:SelectionChangedEventArgs -> ClientGroupEvent
GroupSelected 略有不同:
val GroupSelected: (SelectionChangedEventArgs -> ClientGroupEvent)
我之前在其他情况下也注意到了这种差异,但从来没有考虑过。如果我想调用其中任何一个,我的代码中的语法是相同的......groupSelected(e) 和 GroupSelected(e) 都可以正常编译。
但是,当我尝试从 XAML 中使用这两个时,只有这样才有效:
{x:Static local:EventConverters.GroupSelected}
这行不通:
{x:Static local:EventConverters.groupSelected}
这两者之间有什么区别,XAML 静态扩展只适用于第二个?我会(错误地?)认为它们是同一个东西。
【问题讨论】:
-
如果有人对更好的标题有建议,我会欢迎。
-
以我危险的 F# 知识量,我很惊讶这完全有效。为什么这不会导致无限递归(错误)?您不是用
|> GroupSelected将groupSelected指向自身吗? -
@MarkusDeibel 除非我遗漏了什么,否则
GroupSelected之前let groupSelected必须有第二个定义(它必须接受string而不是@987654335 @)。要指向它自己,它必须是let rec groupSelected(e) ... and GroupSelected = groupSelected。 -
@MarkusDeibel 对不起。我的代码 sn-p 不清楚。我也有一个名为 GroupSelected 的 DU。但这与我的问题无关。我已经更新了代码 sn-p。