问题标签 [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.
javascript - 多态内联缓存如何与可变类型一起使用?
多态内联缓存(PIC)通过按对象类型缓存实际方法来工作,以避免昂贵的查找过程(通常是哈希表查找)。
如果类型对象是可变的(即该方法可能在运行时被猴子修补成不同的东西),如何处理类型比较?
我想出的一个想法是一个“类计数器”,每次调整方法时都会增加,但是这似乎在一个猴子补丁严重的环境中会异常昂贵,因为它会杀死所有的图片那个类,即使它们的方法没有改变。
我确信必须有一个好的解决方案,因为这个问题直接适用于 JavaScript,并且 AFAIK 所有三个大型 JavaScript 虚拟机都有 PIC。
c#-4.0 - 有没有一种融合了动态类型和强类型优势的理想语言?
我有兴趣学习一种在内部将对象处理为哈希表(如 JavaScript)但可以用强类型包装它们以在设计时提供代码完成/智能感知的好处的语言。以下是我希望这种梦幻语言发挥作用的方式:
我希望这个程序能够无误编译、无异常运行并在控制台上打印 “Miauew”。有没有一种语言可以做到这一点?也许是 C#4.0?
objective-c - Objective-C 中的动态类型和返回值
我遇到了一个非常奇怪的行为,我无法理解。我有一个Texture
具有contentWidth
type 属性的类int
。这个类被包装在一个Image
具有width
type 属性的类中int
。的简单地计算为width
底层纹理的 :Image
contentWidth
现在Image
被Button
想要读取图像大小的类(通过组合,而不是继承)使用:
问题是height
变量设置得很好,而width
变量包含NaN
(–2147483648)。我检查了尺寸——它们大约是 200×100 左右,远未达到int
极限。Xcode 调试器工具提示也Texture
正确显示了这两个属性,只有在宽度通过两个访问器后,数字才会出现乱码。对象没有被释放。我错过了什么?
更新:我已经扩展了Image
类中的访问器以查看问题的根源:
现在,当我在第一行中断时,w
设置正确。我跳过,执行返回到调用函数:
…现在bar
包含NaN
.
更新:嗯,明白了:
被image
声明为id
,这就是这里的重点。有人可以解释一下吗?我有一种感觉,我没有调用正确的width
方法,但这里到底发生了什么?我总是尽可能严格地键入我的变量,但这里的id
类型很方便。我不知道它会导致这样的错误。
c# - 为什么 C# 4.0 中使用的 COM 库需要大量使用动态类型?
在 C# 4.0 演示中,我看到很多使用动态类型的代码。例如,以下代码设置 Excel 单元格的值:
excel.Cells[1, 1].Value = ...
但是,您也可以使用强制转换以早期绑定方式访问单元:
((范围)excel.Cells[1, 1]).Value = ...;
为什么 Excel COM 库不首先将 Cell 类型描述为 Range 类型?同样,以下方法的所有参数都是动态的:
excel.ActiveWorkbook.Charts.Add(...)
为什么论点不能是静态的?查看 Excel 对象模型,到处都有动态类型。这是由于 COM 表达能力的限制吗?在 COM 库中使用动态类型而不是静态类型时是否存在模式?
language-design - 为什么动态类型经常与解释语言相关联?
简单的问题:我用 C++/Java 等编译语言和 Python/Javascript 等解释语言做了很多编程(专业和个人)。我个人发现,当我使用静态类型语言进行编程时,我的代码几乎总是更加健壮。但是,我遇到的几乎所有解释语言都使用动态类型(PHP、Perl、Python 等)。我知道为什么编译语言使用静态类型(大部分时间),但我无法弄清楚解释语言设计中对静态类型的厌恶。
为什么陡峭的断开连接?它是解释语言本质的一部分吗?哎呀?
java - ruby 中的对象引用类型
我是 Ruby 新手,目前正在尝试我用作指南的 Ruby 书中的一些示例:
这是一个非常简单的示例,在同一个脚本文件中包含两个类。我对传递给 credit 和 debit 方法的参数类型感到困惑。来自 Java,我仍然在考虑类型,所以很明显,我传递给的帐户变量的类型,比如借方方法,必须是 Account 类型。
由于 ruby 是动态类型的并且不检查类型,我如何安全地对我传递的参数进行操作,并通过以下方式定义方法的其余部分: account.balance -+ amount ?
我想了解,如果我将对帐户以外的对象的引用传递给借方方法,会有什么样的安全性?
当定义以下方法的主体时,它使用给定的参数帐户。现在,我想我在重复自己,因为我仍然无法理解这个想法......我怎样才能使用参数帐户(可以是任何类型,因为没有人在检查)并使用点建立一些逻辑运算符,询问其实例变量,或调用其其他方法,并对可能或可能不是正确种类(或类型)的对象执行计算?当然,隐含地,我希望它是 Account 类型。
另外,如果我在不同的文件中声明这两个类,相同的示例将如何工作?
为新手问题提前诚挚道歉,我只是发现很难将我的思想包裹在动态类型上——或者更好的是,没有类型检查。这本书要么对此有点含糊,要么我无法通过仅用Java思考来动摇我的视野。
任何实际的解释将不胜感激。
programming-languages - 静态类型语言和动态类型语言有什么区别?
我经常听到新的编程语言是动态类型的,但是当我们说一种语言是动态类型的还是静态类型的时,这实际上意味着什么?
java - 如何在 Java 中动态创建类型实例
在我的 Java 应用程序中,我有方法
在这个方法内部,我需要创建一个扩展Transaction的对象T的实例
这样做是否正确
java - CLR 和 JVM 中动态类型的不同方法
.NET 4.0 引入了对动态类型对象调度调用的新支持。据我所知,这涉及:
- CLR 没有变化
- BCL 中的新类型
- 将新语法转换为新类型用法的新编译器
在 Java 领域,人们正在讨论向 JVM添加新的dynamicinvoke
字节码,以便在中间语言抽象之后由 JIT 处理分派。
Java 方法得到了许多重要方面的支持。
这些似乎是两种根本不同的方法。各自的优点是什么,为什么两个阵营选择走不同的道路?我对这两种解决方案的灵活性和运行时性能特别感兴趣。两个虚拟机最终都试图实现相同的目标吗?