如果我有数据类型说:
data Color = Red | Yellow | Green
Run Code Online (Sandbox Code Playgroud)
有没有办法可以将其转换为[Color]类型列表获取所有可能的值?[红色,黄色,绿色]
也许这是一个完整的反模式?
有没有办法比较Haskell中的两个函数?
我的想法是答案是否定的,因为函数不会派生Eq类型.但是我正在尝试编写一个非常简单的函数,这似乎是一件正常的事情:
search :: ((Enum a) => a -> a) -> Card -> [Card]
search op x list = if (op == succ && rank x == King) ||
(op == pred && rank x == Ace)
then []
else let c = [ n | n <- list, rank n == op (rank x)]
in if length c == 1
then x : search op (head c) list
else []
Run Code Online (Sandbox Code Playgroud)
错误信息:
No instance for (Eq (Rank -> Rank))
arising …Run Code Online (Sandbox Code Playgroud) 我正在编写一个应用程序(c#+ wpf),其中所有模态样式对话框都实现为UserControl覆盖main的半透明网格Window.这意味着只有一个Window,它保持了所有公司应用程序的外观和感觉.
要显示a MessageBox,语法如下:
CustomMessageBox b = new CustomMessageBox("hello world");
c.DialogClosed += ()=>
{
// the rest of the function
}
// this raises an event listened for by the main window view model,
// displaying the message box and greying out the rest of the program.
base.ShowMessageBox(b);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,不仅执行流程实际上已经反转,而且与经典的.NET版本相比,它的冗长程度如此:
MessageBox.Show("hello world");
// the rest of the function
Run Code Online (Sandbox Code Playgroud)
我真正想要的是一种不会返回的方法,base.ShowMessageBox直到它引发了对话框关闭事件,但是我无法看到如何在不挂起GUI线程的情况下等待这一点,从而阻止用户点击OK.我知道我可以将一个委托函数作为函数的参数来ShowMessageBox阻止执行的反转,但仍会导致一些疯狂的语法/缩进.
我错过了一些明显的东西,还是有标准的方法来做到这一点?
我想显示一组使用数据的DataTemplate在ItemsControl与ItemsPanel集作为大小3×3的均匀网格的ItemsSource所述的ItemsControl被设置为结合至CollectionViewSource其过滤基于搜索项的源集合。这一切都很好。
我绑定到的列表是任意大小的,但是我只希望显示9个结果,但是我一生都无法解决如何:
a)限制 CollectionViewSource输出前9个项目
b)将限制UniformPanel为仅3 x 3,并且从不创建新行
c)将限制ItemsControl为仅一次创建9个数据模板。
我真的挠头,因为我确定这是一个常见的数据绑定方案,但是我在网上找不到任何有关它的信息。
我正在使用.net TimeZoneInfo FindSystemTimeZoneById方法,我理解查询注册表.注册表中存储的时区ID字符串的值是"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zone"是否取决于Windows安装的语言?
注册表项包含一个名为"显示名称"的值,因此将其作为特定于语言的值是有意义的,但我无法确定是否是这种情况(缺少安装不同语言版本的Windows).谁能让我知道?
我正在尝试执行以下操作,以便从增强信号接收字符串并将其发布到显示器.以下语法不正确.
signal<void (const char*)> UserMessageEvent;
// connect anonymous boost function to display message box on user message event
UserMessageEvent.connect(boost::bind(AfxMessageBox, _1));
Run Code Online (Sandbox Code Playgroud)
如果这是C#,我会做以下操作,让我相信我想使用lambda函数在信号的调用类型和AfxMessageBox参数的类型之间进行转换.但是我不清楚如何做到这一点.
UserMessageEvent += (c) => MessageBox.Show((some const char to LPCSTR conversion)c);
Run Code Online (Sandbox Code Playgroud)
有什么建议?
编辑:msvc10给出的错误是错误C2914:'boost :: bind':不能推断模板参数,因为函数参数是模糊的