Существуют ли языки с динамической типизацией, но не допускающие слабой типизации? - PullRequest
5 голосов
/ 26 марта 2010

Например, добавление (ранее необъявленного) int и строки в псевдокоде:

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

Я видел строго типизированные языки, которые не позволяют добавлять два типа, но они также статически типизированы, поэтому невозможно создать ситуацию, подобную описанной выше. С другой стороны, я видел слабо типизированные языки, которые допускают вышеизложенное и являются статически типизированными.

Существуют ли языки, которые динамически типизированы, но также строго типизированы, так что приведенный выше фрагмент кода не будет действительным?

Ответы [ 2 ]

12 голосов
/ 26 марта 2010

Конечно: 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
5 голосов
/ 26 марта 2010

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...