之前的一个问题产生了一些关于如何检查你的Git repo是否包含脏索引或未跟踪文件的想法.我从讨论中得出的答案如下:
#!/bin/sh
exit $(git status --porcelain | wc -l)
Run Code Online (Sandbox Code Playgroud)
这个答案背后的想法是模仿程序员会做什么:运行git status然后检查输出.
不幸的是git status --porcelain,git status并没有完全相同的事情.特别是,git status将报告未按下的更改,而git status --porcelain不会.这是一个例子
[jarmo@localhost math-hl]$ git status --porcelain
[jarmo@localhost math-hl]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:我需要添加到原始脚本中以确定何时repo已经未按下更改?特别是,这是一种正确的方法吗?
#!/bin/bash
if [ $(git status --porcelain | wc -l) != …Run Code Online (Sandbox Code Playgroud) 这是一个非常基本的问题.我刚开始使用几种不同的来源研究Haskell.我目前无法解读这些内容.
以下自然会很好地检查.
g :: Num a => a -> a
g x = x + 2
h = g (1.0 :: Double)
Run Code Online (Sandbox Code Playgroud)
当我将其解释如下时,这个约束多态的例子对我来说是完全合理的:只要提供的参数g是具有Num实例的类型,一切都可以.
所以,请考虑以下内容.
x :: Num a => a
Run Code Online (Sandbox Code Playgroud)
如果我将其解释如上,我得到:x可以获取具有Num实例的类型的任何值.但是,以下不会进行类型检查.
x :: Num a => a
x = (1.0 :: Double)
Run Code Online (Sandbox Code Playgroud)
我的问题是:是什么确切的区别就在这里?
我有点得到可能发生的事情:在第二个例子中,x定义为它将评估为任何Num,并且 (1.0 :: Double)不符合条件.
但我模糊的想法远非完整的解释,我正在寻找一个更好的解释.