请参阅:https://gist.github.com/anonymous/35ebb1485967b1e4a69adbb6272b186e
我正在编写一个用于学习目的的WebGL绑定。 (这个问题的目的不是关于gamma / glsl或cljs-webgl - 它是关于重构的.WebGL是一个小细节)。
如果我们查看上面的代码,许多函数将gl
作为参数或gl
和shaderProgram
作为参数。这里,gl
是OpenGL上下文,shaderProgram
是片段和顶点着色器。
一直传递gl
有点乏味。在标准的Haskell方法中,人们会在阅读器monad中使用Reader
monad,stick gl
,并完成它。
在Clojure中,我能想到的最接近的类似方法是:
(binding [*gl* ... ]) ;; and use a dynamically bound var.
这种方法是否存在任何缺点(性能?)我应该注意哪些?
这种方法还有其他解决方案吗?
答案 0 :(得分:2)
这种用法正是为其创建的动态变量。
我假设您已阅读https://clojuredocs.org/clojure.core/binding
请注意,动态变量也可用于返回值。
您还应该查看:
您还应该看看:
关于Plumatic Schema,我总是这样设置:
(ns xyz
(:require ...
[schema.core :as sk]
))
; Prismatic Schema type definitions
(sk/set-fn-validation! true)
这告诉Schema在函数入口时验证函数参数的类型。
我总是在我的测试命名空间 中使用它,通常也用于我的其他命名空间( 始终在开发期间 强>,往往也是以后)。它与类型检查编译器不同,但它很接近。