问题标签 [quotations]

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 回答
265 浏览

arrays - 在不知道类型的情况下使用无类型的 F# 引用来复制数组

我正在做一个小项目,使用引号来克隆一些基本记录类型的树,并且在大多数情况下我都可以使用它,我遇到的最大问题是数组。

我尝试了几种方法,但我总是抱怨想要 (string -> string) 但得到 (obj -> obj) 或想要 (object [] -> object []) 但得到 (string [] -> string [ ])。有任何想法吗?


这是一个简单的测试用例。


这是让我走得最远的方法。问题似乎是我无法让它对数组进行类型化,因此在尝试构建记录时它总是在演员阵容中失败。在理解中添加一个演员并没有帮助。

以下 Toyvo 的解决方案适用于上述示例,但不适用于记录数组:

对于以后来的人,这里是工作代码。我删除了 Option 并没有花时间清理它,但它在其他方面相当不错。

现在它实际上也适用于工会。干杯!

0 投票
1 回答
319 浏览

f# - F# 参数检查

F# 有一些很好的简洁参数检查函数,可以像这样使用:

然而,我更喜欢更规范的表达方式,即代码合同:

然而,我梦想编写的代码是这样的:

问题是:这可以用 F# 表达吗?或者换一种说法,在 F# 中是否有 nonNull 的工作实现?

在我看来它不像,但也许这里有人可以验证它。

0 投票
0 回答
1778 浏览

f# - 使用 F# 构建高度可调试的业务规则引擎

问题

我在 F# 中有表示逻辑树的代码。它是一个具有一些相当简单的数学函数的业务规则引擎。我希望能够多次运行树的规则,并查看通过树的每条特定路线被采用了多少次。

要求是基本规则不应该与我目前使用的简单匹配语句改变太多。用属性标记重要函数会很好,但在每个节点上添加对日志记录函数的调用就不行了。我希望能够以两种模式运行代码,一种是只提供答案的高性能标准模式,另一种是在每次调用背后提供更多细节的“探索模式”。虽然我不介意动态加载和分析规则的复杂代码,但规则代码本身必须看起来很简单。理想情况下,我不想依赖 3rd 方库——powerpack 没问题。该解决方案还必须以 .NET 4.0 运行时为目标。

潜在的解决方案

  1. 使用函数名称和参数向每个函数添加日志记录调用。我不喜欢这样,因为即使我可以在某种发布模式下禁用它,它仍然会使规则混乱,并且意味着所有新代码都必须以不自然的方式编写。

  2. 每个函数返回它的结果,然后是一个列表,其中包含迄今为止调用的方法的名称。我不喜欢这样,因为它看起来不自然,并且会影响性​​能。我确信我可以使用计算表达式来完成很多工作,但这违反了保持规则简单的要求。

  3. 使用引号解析规则树,然后构建一个新表达式,它是旧表达式,并调用注入到每个标记函数的站点中的日志记录函数。这是迄今为止我得到的最好的东西,但我担心编译生成的报价以便我可以运行它。我了解(如果我错了,请纠正我)并非所有引文都可以编译。我宁愿没有将规则代码限制为 F# 语言子集的不稳定进程。如果规则编译,我希望我的解决方案能够处理它们。

我知道这是一个具有相当严格要求的难题,但是如果有人对解决方案有任何启发,我将不胜感激。

编辑:仅举一个我可能使用的规则的示例,如果我拥有一个生产产品 A 和 B 的小部件工厂,则可能会使用以下简单的代码。我不想通过用辅助函数和钩子装饰这一层而失去公式的可读性和简单性。

0 投票
1 回答
699 浏览

f# - Build lambda expression programmatically in F#

Let's have the following function definition:

By using the following quotation we get its representation as a lambda expression:

In this previous question it is stated that quotations represent code quoted syntactically, that meaning that we can not get the same expression by wrapping the same function within other function:

Is it possible to build the former expression (Lambda (x, Call (None, dummy, [x]))) programmatically?. The objective would be to implement a dynamic qwrap for simple functions ('a -> 'b). The resulting expression is going to be analyzed and I'm interested in being able to keep the function and args names as they are written in the original function.

0 投票
1 回答
68 浏览

f# - resolveTopDef、TopDefnApp、ResolveTopDefinition?

@Tomasp 有几个博客条目(这里是一个),它们引用了一种使用方法[<ReflectedDefinition>]ResolveTopDefinition从方法中提取引用作为包装定义的替代方法<@ ... @>(或者它是<@@ ... @@>?)。

无论如何,我现在无法编译任何这些东西,我认为这些功能已经改变 - 但我不知道我在谷歌上找到的这些名字的唯一提及是什么或相关Tomas 的博客和工作。

目前的方式是什么?

我见过 Eval.TryGetReflectedDefinition,但这需要 MethodBase,除非我试图反映另一个/已经编译的程序集,否则这种方法似乎不是必需的。

谢谢!

0 投票
1 回答
176 浏览

linq - 将 C# 表达式解析转换为 F#

作为 F# 的新手,我经常尝试将 C# 的部分转换为学习练习。在这种情况下,我正在尝试转换以下 C# 表达式解析代码。很简单,想法是将 lambda 传递给此函数以获取属性名称的字符串表示,而不是使用标准反射技术。我已经省略了另一个 GetMemberName 函数,因为我想一旦我得到一些关于采取什么方法的指导,我就可以弄清楚。

我知道 F# 有引号。我也知道我可以在 F# 中使用 Linq 表达式。我想首先使用引号以 F# 方式尝试它,但我绊倒了。有人可以给我一个kickstart吗?

0 投票
1 回答
95 浏览

python - 从引号之间提取字符串python 3.4串口

我想确定正在使用我的计算机的哪个串行端口,为此我有(VSPE,它是一个虚拟串行端口仿真器,就像 Eltima 虚拟串行端口驱动程序 7.1 一样)和以下代码

现在这段代码给了我

作为答案

我的问题是我怎样才能摆脱这个:[' ']

我只想要COM9或者至少9没有别的。

0 投票
0 回答
38 浏览

java - 拆分窗口“单选按钮测试”为窗口,单选按钮测试

我无法在 Java 中正确解析输入文件。

输入文件:

Window "Radio Buttons" (300, 200)

我需要将其拆分为:

我目前正在使用line.split("\\s")它给我:

我只是不知道要使用什么分隔符或正则表达式。

0 投票
1 回答
214 浏览

f# - 如何在 F# 引用中构造一个通用联合案例?

以下代码失败:

有这个特例:

如何指定 Cons 联合案例的通用参数类型?

0 投票
2 回答
4476 浏览

encoding - fortran中双引号和单引号的区别?

我刚开始使用 Fortran,对双引号和单引号的使用感到困惑。