【问题标题】:Are there any languages that are dynamically typed but do not allow weak typing?有没有动态类型但不允许弱类型的语言?
【发布时间】:2010-03-26 03:24:30
【问题描述】:

例如,在伪代码中添加一个(之前未声明的)int 和一个字符串:

x = 1;
y = "2";
x + y = z;

我见过不允许添加这两种类型的强类型语言,但它们也是静态类型的,所以不可能出现上述情况。另一方面,我见过允许上述情况的弱类型语言并且是静态类型的。

是否有任何语言是动态类型的,但也是强类型的,所以上面的代码段无效?

【问题讨论】:

  • 现在想知道是否有任何语言是静态类型但支持弱类型作为本机功能;)

标签: type-systems


【解决方案1】:

当然:Python。

>>> a = 3
>>> b = "2"
>>> a+b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> b = 2
>>> a+b
5

【讨论】:

    【解决方案2】:

    Ruby 是动态类型的,但是是强类型的。

    irb(main):001:0> 2 + "3"
    TypeError: String can't be coerced into Fixnum
        from (irb):1:in `+'
        from (irb):1
    irb(main):002:0> "3" + 2
    TypeError: can't convert Fixnum into String
        from (irb):2:in `+'
        from (irb):2
    irb(main):003:0> "3" + 2.to_s
    => "32"
    irb(main):004:0> 2 + "3".to_i
    => 5
    

    【讨论】:

      猜你喜欢
      • 2012-11-04
      • 2023-03-11
      • 2014-02-03
      • 2016-09-26
      • 2010-09-22
      • 1970-01-01
      • 2018-10-13
      相关资源
      最近更新 更多