有一个JSLint选项,实际上是一个好的部分,"[需要]围绕立即调用的parens,"意味着构造
(function () {
// ...
})();
Run Code Online (Sandbox Code Playgroud)
反而需要写成
(function () {
// ...
}());
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 任何人都可以解释为什么第二种形式可能被认为更好?它更有弹性吗?不容易出错?它比第一种形式有什么优势?
自从提出这个问题以来,我逐渐理解了在函数值和函数值之间进行清晰视觉区分的重要性.考虑立即调用的结果是赋值表达式的右侧的情况:
var someVar = (function () {
// ...
}());
Run Code Online (Sandbox Code Playgroud)
尽管最外面的括号在语法上是不必要的,但是左括号给出了一个预先指示,即所分配的值不是函数本身,而是调用函数的结果.
这类似于Crockford关于构造函数大写的建议 - 它可以作为任何查看源代码的人的视觉提示.
有几个unix命令设计用于对两个文件进行操作.通常,这样的命令允许通过使用单个破折号代替文件名从标准输入读取其中一个"文件"的内容.
comm -12 <(sort file1) <(sort file2)
Run Code Online (Sandbox Code Playgroud)
我最初不相信的反应是,"这不应该工作.标准输入将只有两个文件的串联.命令将无法分开文件,甚至意识到已经给出了两个文件的内容. "
当然,这种结构确实有效.我用两者测试了它,comm并diff在cygwin 1.7.7上使用了bash 3.2.51.我很好奇它是如何以及为什么有效的:
按照本教程的建议,我克隆了一个没有标准布局的svn存储库.
Run Code Online (Sandbox Code Playgroud)git-svn clone -s http://example.com/my_subversion_repo local_dir-s表示我的Subversion存储库有一个标准布局(trunk /,branches /和tags /.)如果你的存储库没有标准布局,你可以将其关闭.
作为git的新手,我没有意识到只是在没有补充--trunk, - .branches和--tags选项的情况下放弃-s选项,不仅会让我无法使用无分支存储库,而且会让整个检出存储库(而不仅仅是主干的头部).
有没有办法"修复"我的本地git存储库,就好像我是在知道svn存储库布局的情况下创建它的?我可以使用git-svn init重新初始化我的存储库吗?由于涉及的时间长,我希望避免不得不从头开始.
要设置水平,这是一个简单的仿函数:
data Box a = Box a deriving (Show)
instance Functor Box where
fmap f (Box x) = Box (f x)
Run Code Online (Sandbox Code Playgroud)
这允许我们"在盒子内"操作:
> fmap succ (Box 1)
Box 2
Run Code Online (Sandbox Code Playgroud)
如何使用newtype实现同样的语法便利? 假设我有以下内容:
newtype Width = Width { unWidth :: Int } deriving (Show)
newtype Height = Height { unHeight :: Int } deriving (Show)
Run Code Online (Sandbox Code Playgroud)
这有点笨重:
> Width $ succ $ unWidth (Width 100)
Width {unWidth = 101}
Run Code Online (Sandbox Code Playgroud)
这样会很好:
> fmap succ (Width 100) -- impossible?
Width {unWidth = 101}
Run Code Online (Sandbox Code Playgroud)
当然,我不能将Width或Height作为Functor的一个实例,因为它们都没有* …