我已经阅读了很多专家F#,正在构建一个实际的应用程序.在调试时,我已经习惯于传递这样的fsi命令,以使repl窗口中的内容清晰可见:
fsi.AddPrinter(fun (x : myType) -> myType.ToString())
Run Code Online (Sandbox Code Playgroud)
我想扩展它以使用printf格式化程序,所以我可以输入例如
printf "%A" instanceOfMyType
Run Code Online (Sandbox Code Playgroud)
并控制自定义类型的输出.本书暗示可以做到这一点(第93页,"可以扩展通用结构格式以适用于任何用户定义的数据类型,F#网站上涵盖的主题"),但我没有找到任何关于如何实际上实现这一点.有谁知道怎么样?它甚至可能吗?
编辑:
我应该包含一个代码示例,它是我正在处理的记录类型,例如
type myType =
{a: int}
override m.ToString() = "hello"
let t = {a=5}
printfn "%A" t
printfn "%A" (box t)
Run Code Online (Sandbox Code Playgroud)
两个印刷语句产生:
{a = 5;}
Run Code Online (Sandbox Code Playgroud) 我有一个WPF应用程序 - 一个XBAP - 在主页面上有一个ComboBox.当我在ComboBox中选择一个项目时,事件处理程序会重建一个集合,该集合是列表框的数据源.看起来很简单,我之前在WPF中所做的所有事情.
这是从列表中选择项目后我的下拉列表的样子:

红色边界来自哪里?我正在从头开始构建表单,现在没有任何样式或任何内容.项目中的任何地方都没有提到"红色"字样.一旦它出现它就不会消失,并且它出现在我置于控件之上的任何东西上.
这是标记:
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource ResourceKey=DeviceInfoNameConverter}}"></TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
更多细节:
我对搜索到目前为止唯一的猜测是,某种默认错误模板正在应用于控件.我正在使用WIA,VS输出窗口中出现了几个COM异常,显然与ListView的数据绑定有关.控件的数据源是WIA.DeviceInfo对象,转换器只是获取下拉文本的name属性.
在调试会话结束多年关闭这两个窗口后,我发现可能有办法将它们关闭.我通常在调试时打开输出窗口,并且只定期检查错误列表以获取警告,并且无论如何我总是可以找到它们.希望其他人可能知道停止默认行为的方法?
我喜欢Qt Creator 4的一些新的CMake功能,但只要相关文件发生变化,它就会重新运行cmake.有没有办法阻止这个?如果我正在进行一批更改,或者只是保存文件以免丢失我的工作,似乎没有办法告诉它等待.
我需要通过指定URL来调试完全信任的应用程序,或者理想情况下,从我打算将其部署到的Web应用程序中调试.我尝试过以下方法:
从命令行运行"PresentationHost.exe -embedding",通过Visual Studio附加.IDE显示我的断点有效,直到我实际尝试加载.xbap文件,此时它显示没有加载符号.我的断点都没有被击中.我在其他地方的几个建议之前尝试了"mage -cc".
项目的Debug面板中的硬编码URL,然后是F5.或者,"PresentationHost.exe -embedding -debug"并附加到进程然后在IE中加载.xbap.当页面出现时,两者都会导致以下错误:
System.ArgumentException:不支持URI格式.
Run Code Online (Sandbox Code Playgroud)at System.IO.Path.NormalizePath(...) at System.IO.FileStream.Init(...) at System.IO.FileStream..ctor(...) at System.Windows.Interop.ApplicationLauncherXappDebug.GetIdFromManifest(...) at System.Windows.Interop.ApplicationLauncherXappDebug.GetApplicationIdentity() at System.Windows.Interop.ApplicationLauncherXappDebug.Initialize() at System.Windows.Interop.DocObjHost.MS.Internal.AppModel.IBrowserHostServices.Run(...)
我知道ASP.NET将在池中的单个线程上执行请求.反之亦然吗?在请求完成之前,单个ASP.NET请求是否会独占持有工作线程,还是ASP.NET会在多个并发请求之间重用相同的线程?
我正在为一堂课做一些关于性别分类的工作.我一直在使用SVMLight,结果不错,但我想在我的数据上尝试一些贝叶斯方法.我的数据集由文本数据组成,我已经完成了功能缩减,以便将某些贝叶斯方法的特征空间削减到更合理的大小.所有实例都通过tf-idf运行,然后规范化(通过我自己的代码).
我抓住了sklearn工具包,因为它很容易与我当前的代码库集成,但我从GaussianNB获得的结果都是一个类(在这种情况下为-1),并且预测的概率都是[nan].
我贴了一些相关的代码; 我不知道这是否足以继续下去,但我希望我只是在使用sklearn api时忽略了一些明显的东西.我有几个不同的功能集,我尝试通过它,也有相同的结果.使用训练集和交叉验证也是如此.有什么想法吗?可能是因为我的功能空间太稀疏了才能使用吗?我有300多个实例,其中大多数具有数百个非零特征.
class GNBLearner(BaseLearner):
def __init__(self, featureCount):
self.gnb = GaussianNB()
self.featureCount = featureCount
def train(self, instances, params):
X = np.zeros( (len(instances), self.featureCount) )
Y = [0]*len(instances)
for i, inst in enumerate(instances):
for idx,val in inst.data:
X[i,idx-1] = val
Y[i] = inst.c
self.gnb.fit(X, Y)
def test(self, instances, params):
X = np.zeros( (len(instances), self.featureCount) )
for i, inst in enumerate(instances):
for idx,val in inst.data:
X[i,idx-1] = val
return self.gnb.predict(X)
def conf_mtx(self, res, test_set):
conf = [[0,0],[0,0]]
for r, x …Run Code Online (Sandbox Code Playgroud)