2009-02-06 5 views
18

Является ли рубин сильно или слабо типизированным?Рубин сильно или слабо типизирован?

Предположительно то же самое верно для Javascript.

+1

Почему вы думаете, что они были бы такими же - потому что разработчики Rails используют как Ruby, так и Javascript? –

ответ

39

Ruby is «strong typed».

Сильная типизация означает, что тип объекта (но не в смысле ООП, но в общем смысле) проверяется перед выполнением операции, требующей выполнения определенного типа.

Слабая типизация означает, что проверка не выполняется, чтобы гарантировать, что операция может быть успешной на объекте. (Например, когда функция обращается к строке типа и массиву поплавков, если проверка типа не выполняется, операция разрешена)

Редактировать: Прошло 6 лет с момента опубликования этого ответа, и я думаю, что это оправдывает некоторые дополнительные разъяснения:

на протяжении многих лет понятия, что «безопасность типа коммутируемая не является абсолютным» не начали использоваться в пользу двоичного значения (да/нет)

Рубин «сильнее» напечатали (с «er»), чем большинство типичных динамических языков. Тот факт, что Ruby требует явных инструкций для преобразования IE: Array («foo»), «42» .to_i, Float (23), приближает набор символов Ruby к концу спектра «Strong Typed», чем «слабый типизированный», ,

Так что я бы сказал, «Рубин сильнее напечатал динамический язык, чем большинство обычных динамических языков»

+0

Благодарим вас за разъяснение. Помогал. :). 1 для вас. – Chirantan

+23

Статическая типизация * не * подразумевает сильную печать. Например, C статически типизирован, потому что компилятор знает тип каждой переменной, но он не сильно типизирован, потому что память - это просто память и может быть обработана любым способом. – yfeldblum

+0

@ Justice, я думаю, у вас есть точка ... –

-2

Более упрощенный ответ заключается в том, что как рубин, так и javascript слабо типизированы.

Однако этот вопрос не совсем ясен, как может показаться - см. this wikipedia article для более углубленного обсуждения разницы между сильно и слабо типизированными языками.

+2

Кажется, противоречит: http://www.rubyfleebie.com/ruby-is-dynamically-and-strongly-typed/ страньше и страньше ? – weepy

7

IMHO Ruby сильно, но динамически типизирован.

11

В то время как вы можете попасть в рассуждение о определении того термина я бы сказал:

Рубина динамически и сильно типизированный в то время как JavaScript динамически и слабо типизированный.

25

Wikpedia этикетки как «динамический („утка“) напечатал».

Относительно комментария Поп о том, что он был «сильным» - я не уверен, что его объяснение действительно соответствует тому, что происходит под обложками. MRI не действительно «проверяет», чтобы увидеть, можно ли выполнить операцию над объектом; он просто отправляет объекту сообщение, и если этот объект не принимает это сообщение (либо по объявлению метода, либо путем обработки его в #method_missing), он запустит barfs. Если время выполнения фактически проверено, чтобы убедиться, что операции возможны, #method_missing не будет работать.

Кроме того, следует отметить, что, поскольку все в Ruby является объектом (и я имею в виду все), я не уверен, что он сказал о «не в оо-смысле». В Ruby вы либо объект, либо сообщение.

+3

Это на самом деле правильный ответ – andy

Смежные вопросы