>Или ты имел в виду «в контексте оператора»? Тогда причем тут «выбор основы»?В контексте оператора естевенно. Ведь, если подумать, кроме операторов ничего нет. Присвоить значение -- используем оператор присваивания. Сравнение -- используем оператор сравнения. Обратиться к n-элементу массива -- используем оператор доступа. И тут есть другой ньюанс смешивание операторов в одной конструкции. Что будет тут тебе известно:
$array[1] = <STDIN>;
А тут, ты знаешь, что будет? Давай без помощи use warnings; Т.к. в других ситуациях он тебя и не спасет:
@array[1] = <STDIN>;
Вот, подумай почему "в контексте опрератора" присваивания получаем разные результаты? Может потому что нет никаких "контекстов операторов"?
А есть контексты списка, скаляра, никакого значения? Увы, ты пропустил момент, что число в перле это тоже адрес чего-либо, а строка она и в Африке строка. Пример 0 == "0 but true" показывает как Perl хитрописан, ведь если ты не прочитаешь исходники, ты не поймешь, почему тут все валидно:
#!/usr/bin/perl
use strict;
use warnings;
if (0 == "0 but true") {
print "but true\n";
}
Оцениваем: http://ideone.com/iViUX3
А тут, все иначе:
#!/usr/bin/perl
use strict;
use warnings;
if (0 == "устал повотрять 100500 раз, что надо читать копипасты") {
print "but true\n";
}
Оцениваем (увы, ideone имеет свою патченную версию перл, где варнинга нет, а должен): http://ideone.com/Si7wM2
>О чем это должно говорить? О слабой типизации питона? Или просто другом подходе?
Мне ничего не говорит. Извини, питон меня не интересует, поэтому я не выеживаюсь, а задаю тактично вопросы. А ты вот считаешь себя гуру перла, разве нет?
Кстати, зачем наезжать на меня, когда очевидно, что в одних и тех же конструкция ЯП ведут себя по-разному (что логично):
shell> # перл любит выплевывать пустую строку в случае "False", делаем это за него
shell> perl -le 'print ((1 == "0") ? "true" : "false");'
false
shell> perl -le 'print ((1 == "") ? "true" : "false");'
false
shell> perl -le 'print ((0 == "0") ? "true" : "false");'
true
>Или тебе нужны рантайм сообщения?
Ох. Мне нужны были сообщения какие выплевывает перл:
Argument "abc" isn't numeric in numeric eq (==) at abc.pl line 6.
В райнтайме, а не в момент компиляции, ибо для Perl ошибка выше не фатальная: типы он приведет кое-как и код, кое-как, отработает. Ну, ты привел доказательства, меня они устраивают. Ок, спасибо.
>оператор внезапно зависит от контекста. Это теперь неявное преобразование?
Контекста чего? Я в Python не бум-бум, но давай читать вместе:
ValueError: invalid literal for int() with base 10: '3d'
Давай смотреть, что будет и в перле одновременно:
shell> perl -wle 'print int("3a")'
Argument "3a" isn't numeric in int at -e line 1.
3
Ну, как видишь, работает все примерно одинаково. Дальше что? Я, как не про по питону, надеялся увидеть сильную типизацию, ну, чтобы на этапе компиляции все валилось, а че-то примеры походу неправильно выбраны, поэтому спор заходит в тупик.
В итоге, википедия дает все ответы:
Python uses duck typing and has typed objects but untyped variable names. Type constraints are not checked at compile time; rather, operations on an object may fail, signifying that the given object is not of a suitable type. Despite being dynamically typed, Python is strongly typed, forbidding operations that are not well-defined (for example, adding a number to a string) rather than silently attempting to make sense of them.
https://en.wikipedia.org/wiki/Python_%28programming_lan...
Чтение https://en.wikipedia.org/wiki/Duck_typing дает все ответы. Да, я зафейлился, не вникся в детали ЯП и оказался не прав: мои надежды насчет строгой типизации не оправдались. И это хорошо. Это еще раз подтвердило правильность моих мыслей, что профессиональный программист ДОСКАНАЛЬНО изучает ЯП, который он хочет критиковать.
Возможно, ты это знал и подловил меня. А, возможно, и сам не знал. Ибо спорим мы на этот счет уже трындец много времени.
>using namespace std;
Я в плюсах не бум-бум. Пиши на сишке, пожалуйста :) А лучше вообще закрыть спор или поспорить о чем-то другом.
>int x(double a) {return (int)a;}
Ты же понимаешь, что это платформозависимая конструкция? Почитай про извлечение квадратного корня в Quake III, будет интересно, а может это боян для тебя.