相关疑难解决方法(0)

静态类型语言和动态类型语言有什么区别?

我听到很多新的编程语言都是动态输入的,但是当我们说一种语言是动态类型而非静态类型时,它实际意味着什么呢?

computer-science programming-languages static-typing dynamic-typing

894
推荐指数
11
解决办法
40万
查看次数

408
推荐指数
8
解决办法
18万
查看次数

强与静态打字和弱与动态打字的区别

根据我的理解,动态类型与弱类型相同,强类型与静态类型相同.有什么不同?谢谢

static dynamic weak-typing strong-typing

42
推荐指数
1
解决办法
2万
查看次数

什么使编程语言具有动态性?

什么使编程语言被称为动态语言?我应该使用动态编程语言来解决哪些问题?静态编程语言和动态编程语言之间的主要区别是什么?

static programming-languages dynamic

40
推荐指数
3
解决办法
2万
查看次数

37
推荐指数
4
解决办法
4万
查看次数

将javascript变量声明为特定类型

标题说明了一切,但我会提供更多说明:

看到许多javascript示例,其中所有变量都被声明为类型var,并且看到对其他数据类型的支持,为什么不声明这样的特定数据类型的变量?意思是,为什么不是这样的:

string hello = 'Hello, World'

用来代替

var hello = 'Hello, World'

查看像OReilly Javascript这样的网站显示其他类型的保留字.再次,为什么不使用它们?难道不会这样做:typeof(variable)==='string';不再需要吗?

javascript variables variable-declaration

23
推荐指数
1
解决办法
4万
查看次数

我对类型系统的理解是否正确?

以下陈述代表了我对类型系统的理解(它在Java世界之外的实践经验太少); 请更正任何错误.

静态/动态区别似乎非常明确:

  • 静态类型语言为每个变量,字段和参数分配一个类型,编译器会阻止不兼容类型之间的分配.示例:C,Java,Pascal.
  • 动态类型语言将变量视为可以保存任何所需内容的通用容器 - 只有在您对值实际执行操作时才会在运行时检查类型(如果有的话),而不是在分配它们时.示例:Smalltalk,Python,JavaScript.
  • 类型推断允许静态类型语言看起来像(并具有一些优点)动态类型语言,通过从上下文推断类型,这样您就不必在大多数时间声明它们 - 但与动态语言不同,不能例如最初使用变量来保存字符串然后为其分配一个整数.示例:Haskell,Scala

我不太确定强弱差别,我怀疑它的定义不是很明确:

  • 强类型语言为每个运行时值分配一个类型,并且只允许执行为该类型定义的操作,否则会出现显式类型错误.
  • 弱类型语言没有运行时类型检查 - 如果您尝试对不支持的值执行操作,则结果是不可预测的.它实际上可能会做一些有用的事情,但更有可能你会得到损坏的数据,崩溃或一些难以理解的二次错误.
  • 似乎至少有两种不同类型的弱类型语言(或者可能是连续统一体):
    • 在C和汇编程序中,值基本上是比特桶,因此任何事情都是可能的,如果你让编译器解除引用以空字符结尾的字符串的前4个字节,你最好希望它引导一个不包含合法机器代码的地方.
    • PHP和JavaScript通常也被认为是弱类型的,但不要将值视为不透明的位桶; 但是,它们将执行隐式类型转换.
  • 但是这些隐式转换似乎主要适用于字符串/整数/浮点变量 - 这是否真的能保证分类为弱类型?或者还有其他问题,这些语言的类型系统可能会混淆错误?

language-agnostic type-systems

16
推荐指数
2
解决办法
1675
查看次数

是否存在静态弱的类型语言?

我一直在读书

  • static(在编译时检查类型)和
  • 动态(在运行时检查类型)类型

  • (没有隐式转换)和
  • (隐式转换)类型

我知道它们是不同的东西(这里也讨论)所以我一直在考虑这种方式的示例语言:

  • static - strong(C,C++,Java,..)
  • 静态 - (???)
  • 动态 - (python,ruby,..)
  • 动态 - (perl,javascript,..)

所以我的问题是,那里有任何静态弱类型的语言吗?(我想如果不是这样的话就没有意义).以上我的理解/例子是否正确?

types programming-languages casting

10
推荐指数
1
解决办法
3449
查看次数

为什么紧密耦合不好但强烈打字好?

我很难看到松耦合代码的真实好处.为什么花费这么多精力使灵活的东西与各种其他物体一起工作?如果你知道你需要实现什么,为什么不专门为此目的编码?

对我来说,这类似于创建无类型变量:它使它变得非常灵活,但是它可能会导致问题,因为可能传入了一个意外的值.它也使得它更难阅读,因为你没有明确知道传入的是什么.

然而我觉得强烈打字是受鼓励的,但松散耦合是不好的.

编辑:我觉得我对松散耦合的解释是关闭还是其他人正在以错误的方式阅读它.与我的强耦合是当一个类引用另一个类的具体实例时.松散耦合是指类引用另一个类可以实现的接口.

那么我的问题是为什么不专门调用类的具体实例/定义?我将其类比为具体定义您需要的变量类型.我一直在阅读关于依赖注入的一些内容,他们似乎认为松散耦合更好的设计是事实.

strong-typing loose-coupling

9
推荐指数
4
解决办法
4389
查看次数

C++ 11索引模板参数包在运行时以访问第N类型

从这个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种类型.基于该类型,我想声明该类型的变量并对其执行不同的操作.例如,如果它是一个字符串,我想声明一个字符串并进行字符串匹配,如果它是一个整数,我想计算一个数字的平方根.

c++ variadic-templates c++11

8
推荐指数
1
解决办法
1154
查看次数