问题标签 [dynamic-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.
objective-c - 无法弄清楚这个动态打字的东西
我正在整理一个面试问题列表,供面试成为 Cocoa 开发人员的人使用。我是一名程序员,但我从未做过 Objective-C。我偶然发现了一个涉及动态类型的有趣问题。它应该是基本的,我已经尝试过并编译过它,但我仍然不确定它是如何以及为什么工作的。
问题是
当您执行以下操作时,在编译时和运行时会发生什么:
在调试器中我得到
的输出NSLog(@"%d",i)
是3
, 的输出NSLog(@"%@",s)
是3
。
有人能给我解释一下编译器和运行时系统是如何处理所有这些的,同时还要记住我对 Objective-C 和 Cocoa 完全陌生,但对计算机科学一点也不陌生?
c# - 组合动态类型
这可能是一个愚蠢的问题,但我很想知道是否有办法做到这一点。
为了简化导入大量以空格分隔的文件的过程,我想出了一个简单的方案来描述动态类型的布局并将其扔给调用委托的解析器。
布局如下所示:
一切都很好。我现在处于需要导入 2 个非常大的 SDF 的情况,它们的结构 85% 相同,最后除了一些差异。
有没有办法将一个布局附加到另一个,例如:
我意识到行不通的一件事是:
这显然行不通,因为所有 3 种类型都根本不同。
任何想法,将不胜感激 :)
d - 返回动态类型
我知道模板喜欢
但这需要用户询问将返回哪种类型,我想在方法内部计算将返回哪种类型,如:
我不知道我是否可以转换为对象并更改原型。
谢谢大家
java - Java 在运行时使用参数实例化类
我正在使用抽象工厂来返回具体子类的实例。我想在运行时实例化子类,给定具体类名的字符串。我还需要将参数传递给构造函数。类结构如下:
我上面的 attmept 抛出了以下异常:java.lang.NoSuchMethodException: Child.<init>()
,然后是堆栈跟踪。
任何帮助表示赞赏。谢谢!
haskell - 在 Data.Dynamics 中获得多态函数的任何解决方法?
dynApply
from函数Data.Dynamics
看起来很不错,但实际上它需要一个单态函数类型。所以,你不能写
我有一些需要多态返回类型的代码。它们是受限制的形式,例如函数
(其中a
, b
,c
是具体类型)。提前致谢。
c++ - 在什么情况下 dynamic_cast<> 会失败?
在修复庞大代码库中的错误时,我观察到一种奇怪的情况,引用的动态类型从原始Derived
类型更改为Base
类型!我提供了最少的代码来解释这个问题:
funcptr
是一个函数指针 ( void (*)(SomeClass&)
)。 funcptr
可以指向这么多的函数,并且它们有自己的调用流程,因此很难调试。
很奇怪,在调用函数指针后,派生类型ref
从Derived
变为Base
。为了简化我的工作,我怀疑对象切片 from Derived
to Base
,所以我将其制作~Base()
为纯virtual
并重新编译了整个源代码。但是没有编译器错误,这意味着没有Base
被声明的对象。
ref
Derived
动态类型更改为Base
以后dynamic_cast
失败的潜在原因是什么?
python - 鸭子打字:如何避免名称冲突?
我认为理解鸭子类型的想法,并希望在我的代码中更频繁地使用它。但是,我担心一个潜在的问题:名称冲突。
假设我想要一个对象做某事。我知道合适的方法,所以我简单地调用它,看看会发生什么。一般来说,有三种可能的结果:
找不到该方法并
AttributeError
引发异常。这表明该对象不是我认为的那样。没关系,因为使用鸭子打字我要么捕捉到这样的异常,要么我愿意让外部范围处理它(或让程序终止)。方法找到了,它正是我想要的,一切都很好。
方法找到了,但不是我想要的方法;它是来自完全不相关的类的同名方法。执行将继续,直到稍后检测到不一致的状态,或者在最坏的情况下,程序会默默地产生不正确的输出。
现在,我可以看到优质名称如何降低结果#3 的机会。但是项目被合并,代码被重用,库被交换,并且很可能在某些时候两个方法具有相同的名称并且完全不相关(即,它们不打算在多态中相互替代)。
我正在考虑的一个解决方案是添加方法名称的注册表。每个注册表记录将包含:
- 方法名称(唯一;即每个名称只有一条记录)
- 它的概括描述(即,适用于它可能被调用的任何实例)
- 它打算用于的一组类
如果将方法添加到新类,则需要将类添加到注册表(手动)。那时,程序员可能会注意到该方法是否与已经附加的含义不一致,并且如果需要,使用另一个名称。
每当调用方法时,程序会自动验证名称是否在注册表中,并且实例的类是记录中的类之一。如果不是,则会引发异常。
我知道这是一种非常繁重的方法,但在某些精度至关重要的情况下,我可以看到它可能很有用。是否尝试过(在 Python 或其他动态类型语言中)?有没有做类似事情的工具?还有其他值得考虑的方法吗?
注意:我不是指全局级别的名称冲突,避免命名空间污染是正确的方法。我指的是方法名称的冲突;这些不受名称空间的影响。
python - 动态类型设计:处理列表的递归是一个好的设计吗?
由于缺乏维护动态类型代码的经验,我正在寻找处理这种情况的最佳方法:
(python 中的示例,但可以使用任何动态类型语言)
我对此感到很不安,因为我认为一个方法应该只做一件事,而且我认为它没有应有的可读性。因此,我很想创建三个函数:第一个函数将获取任何对象并在其他两个函数之间“排序”,一个用于列表,另一个用于“简单”对象。再说一次,这会增加一些复杂性。
什么是这里最“可持续”的解决方案,以及保证易于维护的解决方案?对于那些我不知道的情况,python 中有没有成语?提前致谢。
c# - IF 块内的 ASP.net C# 变量声明
我尝试在 ASP.net C# 中使用以下代码:
但它返回错误。
我发现该变量Online
不能在外部使用,因为它的范围仅限于声明它的 IF 语句。
通过反复试验,我发现以下代码有效:
}
为什么第二个片段可以工作,尽管它不应该因为变量范围预计将在IF 语句关闭时结束?
谢谢
javascript - 如何用动态类型语言描述函数参数?
我的问题更面向 Python,但也可能与 JavaScript 或其他脚本语言有关。
我通常使用静态类型语言(Java、C++、ActionScript,...)进行开发。
我喜欢不时使用 Python,有时我也需要使用 JavaScript。这些是动态类型语言。这没什么错,但我通常很头疼要了解函数或方法中需要哪些参数。即使它是我自己的带有一些文档字符串的代码也会发生!也许是因为眼睛必须在函数定义之外的地方寻找其他地方。
当然,答案应该在文档中。但有时根本不清楚,或者由于使用了鸭子类型,文档本身可能很难编写(“第一个参数是一个函数,它必须有一个 quack() 方法和一个 feathers(arg) 方法,其中 arg是一个字符串" )。我非常想要的是语言本身内部的一种参数描述(即使它是可选的,就像在 ActionScript 中一样)。
明确描述函数/方法的参数的最佳实践是什么?
如果创建一个特殊的装饰器(如果使用 Python),其目的是在我们使用它时检查数据的类型(但因为它将在运行时而不是在编写时使用,那么重点是什么)呢?
你认为这不应该是一个问题吗?比当前的文档字符串做得更多会使开发人员感到困惑,或者我的思想过于面向静态类型?