问题标签 [duck-typing]

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 投票
3 回答
4034 浏览

c# - 如何在 IEnumerable 上创建动态选择在运行时?

鉴于我有一个IEnumerable<T>T任何对象在哪里,我如何从中选择一个特定的属性,因为我在运行时知道其中一个属性名称的名称作为字符串?

例如:

本质上,我显然只是在做externalIEnumerable.Select(x=> x.Foo);,但我需要Select在运行时执行此操作,此时我无法控制它最初创建的时间。

--

回答:根据 AlanT 的回答,这就是我实际所做的:

我将它保留为表达式,因为调用Compile导致 IQueryable 被枚举,这意味着数据库被不必要地命中。因此,要使用它,我只需执行以下操作:

0 投票
3 回答
2718 浏览

c# - 如何在 IEnumerable 上创建动态多属性选择在运行时?

我昨天问了一个非常相似的问题,但直到今天我才意识到我接受的答案并不能解决我所有的问题。我有以下代码:

使用如下:

这使我可以从IQueryable<TUnknown>. 问题是此代码仅适用于单个主键,我需要添加对多个 PK 的支持。

那么,有什么方法可以调整SelectExpression上面的方法来获取IEnumerable<string>(这是我的主键属性名称列表)并让该方法返回一个选择这些键的表达式?

即鉴于以下情况:

我的 Select 需要执行以下操作(在运行时):

0 投票
3 回答
1622 浏览

delphi - 鸭子在 Delphi 2007 中打字?

问题:

有没有办法用 Delphi 2007 做鸭子打字(即没有泛型和高级 Rtti 功能)?


Delphi 2010 以后的鸭子打字资源:

最后编辑:

我已经深入研究了上面列出的资源,并在这里研究了每个发布的答案。

我最终完善了我的要求,并对这个问题进行了跟进。

0 投票
1 回答
336 浏览

delphi - 在 Delphi 2007 中输入鸭子(续)?

这是对这篇文章的跟进。

我根据此处发布的公认答案完善了我的要求。

我的 *.dpr 文件:

uBirds.pas 清单:

我尝试编码 uDuckTyping.pas:

我的问题:

我想用

  • ObjAuto.GetMethodInfo以确定包装的 Quack 方法的存在。
  • ObjAuto.ObjectInvoke调用包装的 Quack 方法。

我怎样才能完成代码?

0 投票
1 回答
587 浏览

python - 如何使用元组作为 __getitem__() 的参数?

我正在编写一个包装字典的自定义类。因此,我想为它实现getitem。我也将使用元组作为这个字典中的键。但是,当我尝试将元组传递给 getitem 时,Python 会抛出 KeyError。当我将元组传递给getitem时,它看起来像是将我的元组转换为一个 int :

代码:

输出:

Board 是否需要继承映射类型才能让 Python 满意?另外,为什么 Python 一开始就尝试这样做?

0 投票
1 回答
184 浏览

scala - 我如何将类型扩展到scala中的特征

我有一种用于鸭式打字的类型:

我想编写一个强制接口类型的特征,但这不起作用:

另一方面:如果我写一个 trait t1 而不是 type t 那么我就失去了鸭式打字功能:

那么我怎样才能同时使用鸭式打字和接口呢?

0 投票
5 回答
17743 浏览

ruby - Ruby 程序员如何进行类型检查?

由于 ruby​​ 中没有类型,Ruby 程序员如何确保函数接收正确的参数?现在,我在到处重复if object.kind_of/语句来检查和引发运行时错误,这很丑陋。instance_of必须有更好的方法来做到这一点。

0 投票
3 回答
3048 浏览

python - 如果在 Python 中进行鸭式打字,你应该测试 isinstance 吗?

你有一个 Python 类,它需要一个 equals 测试。Python 应该使用鸭子类型,但是在eq函数中包含或排除 isinstance 测试是否(更好/更准确) ?例如:

0 投票
3 回答
1882 浏览

c - 在普通 C 中应用鸭子类型

我的开源纯 C 代码中,我使用这个简单的结构从字符串缓冲区读取和解析数据:

使用这个简单的 API访问缓冲区:

注意:可以在不破坏当前实现的情况下ltsLS_unread替换为。return (ltsLS_good(ls)) ? SIZE_MAX : 0

此代码用于从字符串缓冲区以自定义格式加载一些数据。(可能是一个更好的说明。)


现在我需要不是从字符串缓冲区加载数据,而是从FILE指针加载数据。

我不想复制粘贴实现,而是想重用现有代码。(当然,我可以重构/调整它。)

这是 C++ 中的教科书内容,但是如何在纯 C 中做到这一点而不会产生运行时开销?


这是一个使用lts_LoadStateAPI 且不可复制粘贴的示例函数(当然,可以更改以同时支持字符串缓冲区和FILE *):

0 投票
3 回答
355 浏览

django - Django:鸭子打字友好的接受记录或记录的输入方式

我有这样的功能:

现在bar可以是 Django 记录,也可以是指向记录的 slug。我需要这种灵活性,以便当我手头有实际记录时可以调用这个函数,或者从一个更通用的函数调用这个函数,该函数只有 bar 作为字符串可用(从数据库中提取)。

我意识到我可以做类似的事情:

但这似乎一点也不优雅

如果可以的话,我想避免使用 isinstance。