|
|
|||||
Странное поведение Boolean
Почему не работает
trace(true * 2); //Error: Implicit coercion of a value of type Boolean to an unrelated type Number. В джаве, например, не работает ни одна из конструкций. В питоне работают обе, но в ас3 только одна, почему?
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
"+" — более сложный генерик, допускающий разнообразие типов, например при сложении строк. Умножение строк допустимо? )))
__________________
Reality.getBounds(this); |
|
|||||
Цитата:
Добавлено через 36 секунд Да и к тому же получается на 12 как если бы мы складывали строки, а число 3.
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Чтобы вам еще интереснее было
в CLisp-e (+ t 2) +: T is not a number, ( * t 2) : T is not a numbe в python True * 2 == 2, True + 2 == 3 в js true * 2 == 2 и true + 2 == 3 Erlang 3> true + 2. ** exception error: an error occurred when evaluating an arithmetic expression in operator +/2 called as true + 2 4> true * 2. ** exception error: an error occurred when evaluating an arithmetic expression in operator */2 called as true * 2 в haxe - не скомпилирует c++11 true * 2 == 2, true + 2 == 3 c# - не скомпилируется rust - не скомпилируется UPD
__________________
местонахождение Последний раз редактировалось СлаваRa; 29.03.2017 в 10:26. |
|
|||||
Цитата:
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Цитата:
ЗЫ Зачем работая с as3 вы сравниваете что-то с другими языками, когда вы с ними в данный момент не работаете? почитайте про приведение типов в ас3, посмотрите на оператор +, подумайте, все встанет на свои места
__________________
местонахождение |
|
|||||
Регистрация: Dec 2014
Сообщений: 312
|
СлаваRa, ну что вы в загадки то играете. Лучше объясните по какой логике разработчики языка разрешили неявное приведение булева типа к числу для сложения, но не разрешили для умножения. Уверен можно уложиться в одно предложение.
|
|
|||||
оператор + перегружен(на уровне VM), как минимум, для конкатенации строк, скорее всего(уверен в этом на 146%), приведение типа срабатывает в зависимости от каких-то условий, т.е. при использовании + для конкатенации? происходит преобразование в строку, если один из операндов строка, видимо при использовании операции сложения bool и int первый из-за автокаста преобразуется в ближайшее подходящее, т.е. в int(1), оператор * используется только для умножения числовых типов и не имеет иных предназначений, поэтому никаких преобразований операндов не происходит.
__________________
местонахождение |
|
|||||
Добавлено через 6 минут
Цитата:
__________________
Я заклинаю вас действовать иначе. |
Часовой пояс GMT +4, время: 02:16. |
|
« Предыдущая тема | Следующая тема » |
|
|