Существуют ли языки с динамической типизацией, не допускающие слабой типизации?

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

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

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

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


person Maulrus    schedule 26.03.2010    source источник
comment
теперь интересно, есть ли какой-либо язык, который имеет статическую типизацию, но поддерживает слабую типизацию в качестве встроенной функции;)   -  person nawfal    schedule 04.02.2013


Ответы (2)


Конечно: 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
person Amber    schedule 26.03.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
person Ken Bloom    schedule 26.03.2010