The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Dropbox прекращает разработку Pyston. Опубликован финальный ..."
Отправлено Аноним, 09-Фев-17 02:11 
>>> Говоря про Perl, в нем все есть строка, либо число. В зависимости
>>> от _контекста_ Perl выбирает, что взять за основу: число или строку.
>>Тут уже выше упоминали RTFM
> И что? К чему ты это сказал? Ты вообще понял фразу: In
> Perl, the operator determines what operation is performed? Давай вместе, оператор.
> определяет. какая. операция. будет. исполнена. Ты это понял?

Ты не видишь разницу между контекстом и оператором? Оператор не зависит от контекста. Это не хак и не хинт, это так определено в языке. Или ты имел в виду «в контексте оператора»? Тогда причем тут «выбор основы»?


>>Хотя типизация в перловке предмет долголетних споров и про то, что у перла все же сильная типизация, упоминают намного более авторитетные источники, чем анонимы опеннета. Как впрочем и наоборот.
> Мне лично пофиг кто с кем спорит. Сейчас вот кто-то не может
> ответить по делу, но как лоровское дитя переходит на личности.

Чудило, я тоже вроде как из под анона пишу. Где ты переход на личности углядел? В том, что тот же Рандал Шварц, возможно, будет поавторитетнее группы анонимов опеннета?

>>И что? В питоне тоже все генерируется в рантайме. Динамическая типизация, как она есть.
> Пруф. Без пруфа это пустословие. Где такое же сообщение для Python? Может
> чему выучусь, хотя пистон мне до лампочки.

Пруф чего? Того что int не равен строке?


% python -c 'print 1 == "0"'
False
% python -c 'print 0 == ""'  
False
% python -c 'print 0 == "0"'
False

О чем это должно говорить? О слабой типизации питона? Или просто другом подходе?
https://docs.python.org/2/library/stdtypes.html
> Objects of different types, except different numeric types and different string types,
> never compare equal; such objects are ordered consistently but arbitrarily (so that
> sorting a heterogeneous array yields a consistent result).
> Non-identical instances of a class normally compare as non-equal unless the class
> defines the __eq__() method or the __cmp__() method.

Или тебе нужны рантайм сообщения?


% python -c 'print 1+"0"'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str
% python -c 'print int.__cmp__(1,"")'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
TypeError: int.__cmp__(x,y) requires y to be a 'int', not a 'str'
% python -c 'print str.__eq__("0",2)'
NotImplemented

А теперь фокус:

>>> class X(int):

...     def __add__(self, o): return X(int.__add__(self, int(o)))
...    
...
>>> X(2) + 2 + 3

7
>>> X(2) + 2 + "3"

7
>>> X(2) + 2 + "3d"

Traceback (most recent call last):
  File "<input>", line 1, in <module>
    X(2) + 2 + "3d"
  File "<input>", line 2, in __add__
    def __add__(self, o): return X(int.__add__(self, int(o)))
ValueError: invalid literal for int() with base 10: '3d'
>>>


оператор внезапно зависит от контекста. Это теперь неявное преобразование?
>>Опять же, выше упоминали RTFM вместе со ссылочкой на код. Конкретно "0 but true"  грязный хак на уровне интерпретатора, поэтому приводить его в качестве примера не очень удачная мысль.
> Пфффф. Мужик просто сделал греп по манам, по исходнику перла, ибо фраза
> заезженная. Попробуй вместо "0 but true" использовать "дураки на Волге" и
> эффект не изменится.


% perl -wle 'print 0 == 0 + "дураки на Волге"'
Argument "дураки на Волге" isn't numeric in addition (+) at -e line 1.

>>===
> Ого. Это оператор? Из PHP? Из Python? Из JavaScript? Да. Ведь, в
> Perl его нету! Для сравнения строк нужно юзать "eq", чудо.

Остынь, чудило. Это разделитель цитатируемых кусков текста. Пустые строки между цитатами движок опеннета проглатывает.


>>Это, извините, полиморфизм и не говорит ни о чем. Вроде как даже в хаскеле прокатывает.
> Что?! ПОЛИМОРФИЗМ? В сути динамического приведения типов? Ты серьезно, мээн?

Ты путаешь теплое с мягким. Возможность вызвать фунцию с разными типами аргументов и собственно, реализацию.
http://ideone.com/hiNBFn


    #include <iostream>
    using namespace std;
    
    int x(int a) {return a + 3;}
    int x(double a) {return (int)a;}
    
    int main() {
        // your code goes here
        std::cout << "Hello, World!\n" << "x(3):" << x(3) << "\nx(3.0):" << x(3.0);
        return 0;
    }

поэтому и вызов функции в качестве примера ни о чем не говорит.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру