问题标签 [reify]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
79 浏览

clojure - Clojure 扩展了关联性

我需要实现自定义关联,但它不适用于多个参数。它只处理第一对。似乎它是直接调用 assoc,而不是通过 core assoc 然后 RT/assoc。

应该如何支持多元?

0 投票
2 回答
74 浏览

haskell - 如何反序列化一个 JSON,其中相应的 Haskell 类型在运行时可用作为值?

我正在尝试在 Haskell 中实现一个 DelayedJob 端口(来自 Rails 世界)。

这是我拥有的类型类,它代表一个DelayedJob

以下是我打算如何使用它:

我一直在编写一个相当通用的invokeJob函数,该函数将从jobs表中读取一行,查看jobs.jobtype列并调用版本的正确runJob版本(即runJob属于正确类型类实例的函数)。

我有以下内容,但它充满了样板:

本质上,有没有办法deserialise在运行时动态地约束函数的具体类型,而不必编写这么多样板文件?

0 投票
1 回答
781 浏览

javascript - Meteor - IE11 显示空白页

我在 IE11 下收到此错误:

对象不支持在线“for”这个属性或方法:

来自 modules.js 中的 node_modules/meteor/modules/node_modules/reify/lib/runtime/utils.js

我试图更新所有内容但没有运气

我的包裹清单如下:

你有什么主意吗?

谢谢。

0 投票
1 回答
212 浏览

java - 如何从 Clojure 中的类调用具体化的 Java 接口?通话无法解决

我正在尝试将一些 Java 代码直接翻译成树莓派上的 Clojure。我坚持在方法调用中实现接口 - addListener。

我尝试过使用 reify、proxy 和 deftype。通过 reify,我尝试为编译器提供尽可能多的提示。

这是原始的Java 代码

这是我翻译的 Clojure 代码:

我总是以同样的错误告终:

IllegalArgumentException 未找到匹配方法:com.pi4j.io.gpio.impl.GpioPinImpl clojure.lang.Reflector.invokeMatchingMethod 类的 addListener (Reflector.java:79)

0 投票
0 回答
215 浏览

clojure - 使用宏动态生成 reify 子句

我正在尝试包装一个实现并为包装对象实现的所有接口动态生成 reify 子句。

例如:

我想生成:

或者

取决于是wrapped只实现BaseInterface还是两者兼而有之BaseInterfaceAnotherInterface

我尝试了类似以下的方法,但它失败了,因为宏在编译时被评估并且我的第二个参数(cond->表达式)没有它的运行时值:

关于如何实现我正在尝试的任何建议。我想避免 if-else 分支,因为一旦我有更多接口,它就会导致组合爆炸。

0 投票
2 回答
252 浏览

clojure - 如何具体化 Prolog 的回溯状态以执行与 Clojure 中的“lazy seq”相同的任务?

这是一个用 Clojure 编写的数字快速排序算法。它基本上是在“The Joy of Clojure”,第 2 版,第 133 页中找到的快速排序算法。我稍微修改了它以(希望)更好的可读性,因为原始感觉有点太紧凑了:

该算法由对 的调用开始qsort,它将传递的数字列表封装到另一个列表中(从而创建一个包含单个列表的列表),然后调用qsort-inner.

qsort-inner有三个值得注意的点:

  • 它延迟了实际处理。它不是返回对输入列表进行完整排序的结果,而是返回一个“lazy-seq”,它是一个 (object? thing? thunk ?) 在查询时发出排序序列的下一个数字,即在一个根据需要。计算的状态由悬挂的尾部给出(cons oldpivot (qsort-inner rightpartz))
  • 每当算法沿着排序树“向左”游荡时,都会使用 + 尾递归部分(有关算法的详细信息,请参见下文。looprecur
  • (qsort-inner rightpartz)当获得下一个最小数字并且可以“重新排列”排序树时使用完全递归调用(有关算法详细信息,请参见下文。)

借助这个lazy-seq东西,我们可以让算法一一发出数据:

我正在考虑如何在 Prolog 中执行这种惰性快速排序。事实上,懒惰,至少在这种情况下,在 Prolog 中是通过回溯免费提供的!我们可以要求第一个结果,计算停止,然后通过回溯获得下一个结果。

“懒惰”地对列表进行排序:

必须得到他们所有:

不幸的是,跟踪计算状态的数据结构并不明显:它在堆栈上,不能统一为变量。因此,当我在 Prolog 的顶层时,只能使用这种“懒惰”。

如何捕获计算状态并稍后调用它?

注意快速排序的工作原理

  • 给定一个数字列表,该算法选择列表的第一个元素作为枢轴值(图像中的浅绿色)。
  • 然后,它构建一棵树,其中那些数字严格小于“左侧”列表中的枢轴值,枢轴本身(深绿色)和那些大于或等于“右侧”列表中的枢轴值的数字。
  • 然后它递归地沿着这棵树“向左”移动。
  • 这一直持续到小于枢轴值的数字列表为空。
  • 此时,枢轴值(此处为 28)是最小的数字,可以输出。
  • 这使得列表对一个元素进行排序更小。现在可以通过简单的重新排列操作将树减少一级:现在无左分支和无枢轴的“最深的树节点,但一个”的右分支成为树节点的左分支“最深的树 -节点但两个”。
  • 现在可以再次“向左”搜索最小元素。

树结构不需要明确保留,因为它不包含任何信息。相反,交替的“叶子列表”和“枢轴编号”的序列保存在一个列表中。这就是为什么我们最初的“数字列表”。

快速排序的部分示例运行

0 投票
1 回答
152 浏览

haskell - 有人可以用*非常*简单的术语解释反射包 API 吗?

我很难理解描述反射包的文档/示例。我是一名命令式编程老手,但也是一名 Haskell 新手。你能引导我完成一个非常简单的介绍吗?

包:https ://hackage.haskell.org/package/reflection

编辑:对于结束这个问题的人:这是对 Haskell 反射的初学者介绍。下面的答案非常好,其他答案也很有用,所以请重新打开。

0 投票
1 回答
1935 浏览

javascript - npm install 挂在“reify:tailwindcss:timing build:queue Completed in 141ms”

它总是挂在同一个地方:reify:tailwindcss: timing build:queue Completed in [number]ms

我什至试过走开并让它过夜,但无济于事。真正令人沮丧的是,大约一周前,这对我来说是另一个项目,但在过去的两天里,我遇到了这堵墙。

我尝试了几种我在这里看到的方法(每次都删除node_modules文件夹):

  • npm config set registry http://registry.npmjs.org/
  • npm cache clear --force
  • 将 NPM 降级到 v6

这是package.json文件:

这是最后几行输出npm install --verbose