小编Jam*_*lay的帖子

获取任意git对象的SHA的最简单方法是什么?

我想要一个git命令,它只输出任意对象的SHA(commit,tree,blob等).基本上:

$ git sha HEAD
7b78f727c91edc7726f3c31113bc7b1509fea163
$ git sha master^:CHANGELOG
0dcc5f003ed89c30a8d0376a29d546c20449fd90
Run Code Online (Sandbox Code Playgroud)

......等等.这应该是世界上最简单的事情,但我无法找到一个好方法.我不介意使用复杂的,带有选项的git命令的别名,但似乎我必须错过一个非常简单的取消引用命令,git必须始终在引擎盖下使用.

git

5
推荐指数
1
解决办法
271
查看次数

是否有可能在伊德里斯中抽象出来?

我正在使用Idris进行类型驱动开发,学习如何使用可变数量的参数定义函数.我有点雄心勃勃,想要编写一个mapN函数,将(n : Nat)参数函数映射到n某种Applicative类型的值.

调查这个问题导致我认为,如果没有至少也提供函数的参数类型,那可能是不可能的.这导致我尝试编写一个函数,它将获取一个Nat和一个可变数量的Type参数并返回一个函数类型,就像你在类型之间串起箭头一样.如:

Arrows 0 Int = Int
Arrows 1 Int String = Int -> String
Run Code Online (Sandbox Code Playgroud)

这是我最好的尝试,但不起作用:

Arrows : (n : Nat) -> (a : Type) -> Type
Arrows Z a = a
Arrows (S k) a = f where
  f : Type -> Type
  f b = Arrows k a -> b
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这两种类型的签名都没有意义,因为有时候我希望函数返回a Type,有时它会返回Type -> Type,有时会返回Type -> Type -> Type等等.我认为这与使用可变数量的参数编写任何其他函数大致相同,但似乎因为这些参数是类型,所以它可能是不可能的.

寻找答案,我遇到了由Haskell中的-XPolyKinds启用的 …

idris

5
推荐指数
1
解决办法
178
查看次数

是否有一个 Clojure 函数接受一个映射并返回一系列交替的键和值?

给定一个 map {:a 1 :b [2,3]},是否有一个内置函数可以返回序列(:a 1 :b [2,3])

用例是将选项映射应用于函数,该函数对参数列表的其余部分进行映射解构绑定。这是 core.cache 中的一个示例。这是一个人为的例子来说明:

(defn make-car [& {:as options}] (assoc options :car true))
(make-car :color "red" :speed "fast")
; => {:car true, :speed "fast", :color "red"}
Run Code Online (Sandbox Code Playgroud)

现在如果我们想分别管理选项和apply它们到函数中,我们有一个问题:

(def options {:color "red" :speed "fast"})
(apply make-car options)
; => {:car true, [:speed "fast"] [:color "red"]}
Run Code Online (Sandbox Code Playgroud)

...因为当然seq地图的 是其键值对的序列。这是我想出的最好的:

(apply make-car (interleave (keys options) (vals options)))
; => {:car true, :speed "fast", :color "red"}
Run Code Online (Sandbox Code Playgroud)

这是非常可怕的。我知道我可以让我自己的函数来做到这一点,但我很惊讶我没有找到内置的东西。如果没有内置的东西,那么我可能想避免在库代码中像这样解构参数列表。

clojure destructuring

4
推荐指数
1
解决办法
292
查看次数

标签 统计

clojure ×1

destructuring ×1

git ×1

idris ×1