我听到很多新的编程语言都是动态输入的,但是当我们说一种语言是动态类型而非静态类型时,它实际意味着什么呢?
computer-science programming-languages static-typing dynamic-typing
根据我的理解,动态类型与弱类型相同,强类型与静态类型相同.有什么不同?谢谢
什么使编程语言被称为动态语言?我应该使用动态编程语言来解决哪些问题?静态编程语言和动态编程语言之间的主要区别是什么?
有人能告诉我什么是强打字和弱打字意味着什么更好?
prototyping static-typing weak-typing strong-typing dynamic-typing
标题说明了一切,但我会提供更多说明:
看到许多javascript示例,其中所有变量都被声明为类型var,并且看到对其他数据类型的支持,为什么不声明这样的特定数据类型的变量?意思是,为什么不是这样的:
string hello = 'Hello, World'
用来代替
var hello = 'Hello, World'
查看像OReilly Javascript这样的网站显示其他类型的保留字.再次,为什么不使用它们?难道不会这样做:typeof(variable)==='string';不再需要吗?
以下陈述代表了我对类型系统的理解(它在Java世界之外的实践经验太少); 请更正任何错误.
静态/动态区别似乎非常明确:
我不太确定强弱差别,我怀疑它的定义不是很明确:
我很难看到松耦合代码的真实好处.为什么花费这么多精力使灵活的东西与各种其他物体一起工作?如果你知道你需要实现什么,为什么不专门为此目的编码?
对我来说,这类似于创建无类型变量:它使它变得非常灵活,但是它可能会导致问题,因为可能传入了一个意外的值.它也使得它更难阅读,因为你没有明确知道传入的是什么.
然而我觉得强烈打字是受鼓励的,但松散耦合是不好的.
编辑:我觉得我对松散耦合的解释是关闭还是其他人正在以错误的方式阅读它.与我的强耦合是当一个类引用另一个类的具体实例时.松散耦合是指类引用另一个类可以实现的接口.
那么我的问题是为什么不专门调用类的具体实例/定义?我将其类比为具体定义您需要的变量类型.我一直在阅读关于依赖注入的一些内容,他们似乎认为松散耦合更好的设计是事实.
从这个SO主题(和这篇博文),我知道如何在模板参数包中访问第N类型.例如,上述SO问题的答案之一表明:
template<int N, typename... Ts> using NthTypeOf = typename std::tuple_element<N, std::tuple<Ts...>>::type;
using ThirdType = NthTypeOf<2, Ts...>;
Run Code Online (Sandbox Code Playgroud)
但是,这些方法仅在编译时起作用.尝试做以下事情:
int argumentNumber = 2;
using ItsType = NthTypeOf<argumentNumber, Arguments...>;
Run Code Online (Sandbox Code Playgroud)
会导致编译错误:
错误:非类型模板参数不是常量表达式
有没有办法在运行时访问第N类型?
这是我的用例:
我的程序读取一个文本文件,它基本上是一个数字数组.每个数字i指的是我的类基于模板化的模板参数包的第i种类型.基于该类型,我想声明该类型的变量并对其执行不同的操作.例如,如果它是一个字符串,我想声明一个字符串并进行字符串匹配,如果它是一个整数,我想计算一个数字的平方根.
dynamic ×2
static ×2
weak-typing ×2
c++ ×1
c++11 ×1
casting ×1
javascript ×1
prototyping ×1
type-safety ×1
type-systems ×1
types ×1
variables ×1