我只是在学习Haskell和IO monads.我想知道为什么这不会强制程序输出"hi"以及"bye":
second a b = b
main = print ((second $! ((print "hi") >>= (\r -> return ()))) "bye")
Run Code Online (Sandbox Code Playgroud)
据我所知,$!
运算符会强制要求第一个参数second
进行求值,并且>>=
运算符需要运行print "hi"
以便从中获取值并将其传递\r -> return ()
给屏幕,这将打印"hi"到屏幕.
我的推理有什么问题?
而且,有没有办法证明Haskell不能被欺骗(除了使用不安全的函数)在"安全"代码中运行IO操作?
找不到任何相关信息.我的控件渲染速度非常慢,我注意到SuspendLayout
在进行重大更新时我没有打电话.
我有点怀疑,因为顶级控件包含包含其他控件的控件等等,调用SuspendLayout
我的顶级控件也会挂起每个嵌套控件的布局,还是我需要为每个控件调用它?
在WinForms中,如何UserControl
在我放置表单时创建一个,然后通过从工具箱中拖动它们来添加其他控件,就像所有容器控件(面板,组框等)一样?我试图通过将控制放在我的控制中来添加控件但是当我移动控件时我添加的控件保持在它们所在的位置,如果不是我的控制我会使用a Panel
(其他控件会移动)与小组).
如何安全地将数据保存到C#中已存在的文件中?我有一些序列化到文件的数据,我很确定直接保存到文件不是一个好主意,因为如果出现任何问题,文件将被破坏,以前的版本将丢失.
所以这就是我到目前为止所做的事情:
string tempFile = Path.GetTempFileName();
using (Stream tempFileStream = File.Open(tempFile, FileMode.Truncate))
{
SafeXmlSerializer xmlFormatter = new SafeXmlSerializer(typeof(Project));
xmlFormatter.Serialize(tempFileStream, Project);
}
if (File.Exists(fileName)) File.Delete(fileName);
File.Move(tempFile, fileName);
if (File.Exists(tempFile)) File.Delete(tempFile);
Run Code Online (Sandbox Code Playgroud)
问题是,当我试图保存到Dropbox中的文件时,有时我得到一个异常,告诉我它无法保存到已经存在的文件中.显然第一个File.Delete(fileName);
没有立即删除文件,但稍后.所以我得到了一个例外,File.Move(tempFile, fileName);
因为该文件存在,然后文件被删除,我的文件丢失了.
我已经在我的Dropbox中使用了其他应用程序和文件,不知怎的,他们设法不搞乱它.当我试图保存到我的Dropbox文件夹中的文件时,有时我会收到一条消息,告诉我该文件正在被使用或类似的东西,但我从来没有遇到过被删除文件的问题.
那么这里的标准/最佳做法是什么?
好的,这是我在阅读完所有答案后想出来的:
private string GetTempFileName(string dir)
{
string name = null;
int attempts = 0;
do
{
name = "temp_" + Player.Math.RandomDigits(10) + ".hsp";
attempts++;
if (attempts > 10) throw new Exception("Could not create temporary file.");
}
while (File.Exists(Path.Combine(dir, name)));
return name; …
Run Code Online (Sandbox Code Playgroud) 如果我有这个:
public string DoSomething(string arg)
{
string someVar = arg;
DoStuffThatMightTakeAWhile();
return SomeControl.Invoke(new Func<string>(() => someVar));
}
Run Code Online (Sandbox Code Playgroud)
这种方法可以从多个线程同时调用,一个线程是停留在DoStuffThatMightTakeAWhile
,然后第二个线程调用DoSomething
具有不同的arg
,将这个改变的值someVar
所有线程,因此,DoSomething
返回的第二个版本someArg
在两个通话,或someVar
每个线程都会存在一个?
编辑我认为我的编辑Action
应该是Func
这样的.
就像我可以从一个点获取一个元素document.elementFromPoint
或者document.getElementFromPoint
,如果该点位于文本节点,是否有可能以某种方式获取文本节点?我想如果至少我可以获得文本节点的位置和大小,那么我可以找出它们中包含哪个点.但是DOM节点没有位置属性.是否可以这样做?
我正在研究一个有时需要记住特定页面的Web抓取工具,然后转到其他页面,然后返回到该页面.目前我只保存页面的网址,但这对于Google地图这样的网页不起作用,其中网址始终相同.
我可以看到该GoBack
方法确实返回到上一页,所以不知何故WebBrowser
记得以前的页面是什么.我该如何手动完成此操作?我可以计算自从我想要返回的页面以来已经访问了多少页面,然后GoBack
根据需要多次调用,但这是非常不可靠和不优雅的.所以我想知道如何实现一个GoBackToAParticularPage
方法.
我认为有一件事可以让我更接近解决方案:保存所有帧的URL,然后在返回该页面时将它们放回原处.我认为这将解决谷歌地图问题.我还没有测试过.我不确切知道这样做的正确方法是什么.在设置URL之前,我需要等待帧存在.
编辑此代码应说明整个问题:
[XmlInclude(typeof(AThing1))]
public abstract class AThing
{
public abstract string Name { get; set; }
}
[XmlInclude(typeof(IThing1))]
public interface IThing
{
string Name { get; set; }
}
public class AThing1 : AThing
{
public override string Name { get; set; }
}
public class IThing1 : IThing
{
public string Name { get; set; }
}
List<AThing> aThings = new List<AThing>(new AThing[] { new AThing1() { Name = "Bob" } });
List<IThing> iThings = new List<IThing>(new IThing[] { …
Run Code Online (Sandbox Code Playgroud) 考虑这段代码:
public class Foo
{
public int a { get; set; }
public int b { get; set; }
}
private void Test()
{
List<Foo> foos = new List<Foo>();
foos.Add(new Foo());
foos.Add(new Foo());
Expression<Func<Foo, int>> exp0 = f => f.a * f.b;
Expression<Func<int>> exp1 = () => foos[0].a * foos[0].b;
Expression<Func<int>> exp2 = () => foos[1].a * foos[1].b;
}
Run Code Online (Sandbox Code Playgroud)
你怎么能把exp0
它变成两个与exp1
和相同的表达式exp2
.请注意,我不想仅为exp0
每个Foo
in 评估foos
,而是获得两个新表达式.
[更新]:
基本上,我希望能够扩大或"扁平化"传递给A的表达Linq
扩展方法,如Sum
入枚举每个项目一个表达,因为这些枚举是静态的,因为我已经有代码读取不表达获取参数(然后将它们转换为另一种语言). …
如果我WebBrowser
在我的应用程序中托管一个,并且在我的WebBrowser调用上显示的网页中有一个javascript代码window.close()
,我在提示符上单击"是",我的WebBrowser
消失,但我的表单保持打开状态.
我不想禁用javascript,而不是按"是"显然不是解决方案.处理这个问题的最佳方法是什么?即使用户按下"是",这是否可以以编程方式取消?而且,还有其他任何类似的javascript技巧window.close()
可能会搞砸我的应用程序,我应该知道吗?(我的应用程序使用a WebBrowser
来搜索网络,因此应该考虑每个可能的javascript代码.)