考虑clojure repl中的以下代码序列
(def elems (atom {}))
(swap! elems assoc 42 [:a 7])
elems
Run Code Online (Sandbox Code Playgroud)
产生预期的{42 [:a 7]}.现在试试
(compare-and-set! elems elems (atom {}))
Run Code Online (Sandbox Code Playgroud)
生产false,意味着compare-and-set!操作没有成功.我很惊讶,因为我希望在操作中elems测试相同.我知道我可以用来完成无条件重置原子的目标,但我想知道为什么不完全相同?elemscompare-and-set!reset!compare-and-set!
有些日子就是这样.好的,我正在尝试使用......以及任何可行的方法来获取一些文本.我认为JQuery可能是一个很好的方法,但是,为了更好的衡量,我也会尝试XMLHttpRequest.两者完全无声的失败.我想我甚至不理解这个最小,最简单的情况.这里是
如果我在几乎任何浏览器的地址栏中键入以下内容,我会在窗口中获得一些不错的文本
http://www.gutenberg.org/files/11/11.txt
现在,我想在我的磁盘上写一个小的html文件来做同样的事情.这是我的尝试; 我一遍又一遍地浏览了这个文件的每一个字母,并检查了几个在线文档,找到了正确的JQuery和XMLHttpRequest语法,我根本看不出任何错误.但这两种方法都没有任何作用.
有什么建议?
爱丽丝?
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js" type="text/javascript"></script>
<script>
document.write('Alice?')
$.get(
'http://www.gutenberg.org/files/11/11.txt',
function(data) {
document.write(data);
alert('Load was performed.');
});
</script>
<script type="text/javascript">
(function GetURL()
{
document.write('Alice?');
var request = new XMLHttpRequest();
var url = 'http://www.gutenberg.org/files/11/11.txt';
request.open('GET', url, false);
request.send(null);
document.write(request.responseText);
})();
</script>
Run Code Online (Sandbox Code Playgroud)
这里有一个微观问题,关于为什么我想出的最终答案中需要向上转换(在本文的底部);以及一个关于我是否错过了“房间里的大象”的宏观问题:一些非常明显的简洁方式来做我想做的事[请不要问我-为什么-我想要我真正想要的;只要把它当作我想要这个的给定,它就是......]
我想通过 MongoDB.Bson CLR 程序集从 F# 初始化 BsonDocument。我认为我应该使用的 BsonDocument 构造函数的特定重载是
MongoDB.Bson.BsonDocument.BsonDocument(IDictionary<string,object>)
Run Code Online (Sandbox Code Playgroud)
这就是为什么我认为这是我应该使用的(以下是在类型花园中的漫长漫步......)
MongoDB 站点MongoDB CSharp 驱动程序教程中的 C# 示例使用集合初始值设定项语法,该语法映射到 BsonDocument 公开的接口上的 .Add 的一个或多个调用。教程示例类似于以下内容:
var bdoc = new BsonDocument { { "a", "1" }, { "b", "2" }, };
Run Code Online (Sandbox Code Playgroud)
我不确定正在使用 .Add 的哪个重载(并且不知道如何在 Visual Studio 中检查),但所有基于字典的重载都键入为 <string, object>。在这种情况下,每对中的第二个值,即字符串类型的“1”和“2”,自动(通过继承)也是对象类型,因此一切正常。.Add 的其他重载要求第二项的类型为 BsonValue,它是 BsonString 的抽象超类型,无论使用哪种重载,它都具有从 .NET 字符串的隐式转换;所以那里也一切都好。调用构造函数的哪个重载并不重要。
这有点难以转化为 F# 等效项,因为很难获取 BsonDocument 的 .Add 方法。我想到了
[("a", "1");("b", "2");] |> Seq.iter BsonDocument.Add
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为 BsonDocument.Add 不是静态方法;我可以实例化 BsonDocument,然后编写一个调用 BsonDocument 的 .Add 方法的 fun lambda,这至少会隔离 fun 的可变性:
[("a", "1");("b", "2");] …Run Code Online (Sandbox Code Playgroud) 考虑Octave/Matlab中的以下两个函数; 他们之间的唯一区别是身体中的线条是否以分号结尾:
function [a, b, c] = fooNoSemicolons (x, y, z)
a = x * 42
b = y + 42
c = (x * y) / (z * 42)
endfunction
function [a, b, c] = fooSemicolons (x, y, z)
a = x * 42;
b = y + 42;
c = (x * y) / (z * 42);
endfunction
Run Code Online (Sandbox Code Playgroud)
现在考虑以下调用及其输出:
fprintf ("no semicolons: \n"); disp (fooNoSemicolons (12, 13, 14));
fprintf ("done\n");
fprintf ("semicolons: \n"); disp (fooSemicolons (12, 13, 14)); …Run Code Online (Sandbox Code Playgroud) 假设 HEAD 位于 master 的最终提交处,日志如下所示
$ git log --oneline
bcaee1c 15 July update
02ff17a add feature x
0910b6f end of weekly update
c2b7189 add 03 july update
737be94 add feature y
Run Code Online (Sandbox Code Playgroud)
现在我想回顾一下过去:
$ git checkout 0910b6f
Run Code Online (Sandbox Code Playgroud)
现在日志没有显示最近状态的任何提示——来自 HEAD 的相对未来
$ git log --oneline
0910b6f end of weekly update
c2b7189 add 03 july update
737be94 add feature y
Run Code Online (Sandbox Code Playgroud)
好吧,没问题,我只是“记住”或“写下”最远的提交,bcaee1c然后我可以返回git checkout bcaee1c,但是 BAMMO,来了一个电话,一堆紧急会议,强制重启,周末,我“忘记”和/或丢失了便利贴。我(很久)回来后,所有的精神背景都被破坏了,并开始创作,后来才发现我搞砸了,并且有一份重置、恢复和倒带的取证工作。
我可以git log展示 的未来HEAD吗?对于这种情况,有更好的 git-fu 吗?
我正在阅读"了解你一个Haskell"中有关随机性的一些样本,我对此感到有些困惑newStdGen.根据文档,它更新内部变量,以便getStdGen下次调用时产生不同的内容.这听起来不像是参考透明度.实际上,以下程序显示进一步调用getStdGen产生不同的结果,至少在单变量绑定变量时:
import System.Random
main = do
gen <- getStdGen
putStrLn $ take 20 ( randomRs ('a','z') gen)
newStdGen
gen <- getStdGen
putStrLn $ take 20 ( randomRs ('a','z') gen)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)?> main dgnatnxgvammlgxgeumk rrxxnwupmbnxpxrkofjw
我很欣赏getStdGenis 的类型IO StdGen,它是"一个IO动作,当执行时,将产生一个StdGen",以及绑定操作
gen <- getStdGen
Run Code Online (Sandbox Code Playgroud)
将每个绑定StdGen到(顺序本地)变量gen.也许解决方案只是语法中bind隐含的monadic 操作序列do确保两个gen变量不同.
我要感谢我对我的理由的确认或驳斥以及任何进一步的澄清,这会使这看起来不那么怪异.
编辑:
评论帮助我意识到,我更深层次的困惑涉及使用相同的参数(即无)调用两次并获得不同结果的外观getStdGen.获得相同参数的相同结果的属性不称为参照透明度,因此我的问题具有误导性.State正如user2407038所指出的,幕后发生的事情类似于正在发生的事情:结果是隐藏状态的函数,它们在绑定操作中一起被线程化.