На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 351 352 [353] 354 355 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    D_KEY, посмотри на Питон, там ван Россум вообще напрасно в дебри полез:
    isinstance(object, type) = True
    isinstance(type, object) = True
    isinstance(object, object) = True
    Это тебя не смущает?

    Цитата korvin @
    меня смущает. и компилятор джавы смущает. и всех нормальных людей смущает.

    ЗАйдем с друго стороны. Хорошо, пусть есть запрос типа, typeof, и он выдает при вызове typeof(integer) -> type, как тебе кажется логичным. Что выдаст typeof(type)?
      Цитата Romkin @
      Ерунда. Элементарная логика подсказывает, что, например в Delphi
      1. Любой класс порождается от TObject
      2. TObject - класс.
      Истинность TObject.InheritsFrom(TObject) логично.
      Точно так же каждый класс замкнут сам на себя, является экземпляром своего типа. И суперкласс type не нужен.

      элементарная логика подсказывает, что наследование и определение типа -- не одно и то же. и класс не является экземпляром своего типа, иначе класс содержал бы все те же поля и методы, что и его экземпляры.

      Цитата Romkin @
      НУ вот. На каком основании метод класса должен давать разные результаты при вызове из самого класса и экземпляра этого класса?

      в смысле? он как раз дает одинаковые результаты.
      ExpandedWrap disabled
        typeof(1) -> Integer
        typeof(Integer) -> Type
        typeof(typeof(1)) -> Type
         
        равносильно
         
        1.getType -> Integer
        Integer.getType -> Type
        1.getType.getType -> Type

      если же у вас отсутствуют метатипы, то выражение typeof(Integer) вообще не имеет смысла
        Цитата korvin @
        равносильно

        1.getType -> Integer
        Integer.getType -> Type
        1.getType.getType -> Type

        Замечательно. И что же такое type? Класс?
        Цитата korvin @
        и класс не является экземпляром своего типа, иначе класс содержал бы все те же поля и методы, что и его экземпляры.

        А type, значит, является экземпляром своего типа. И содержит все поля и методы всех своих экземпляров?

        Добавлено
        korvin, что выдает type.getType?
          Цитата Romkin @
          ЗАйдем с друго стороны. Хорошо, пусть есть запрос типа, typeof, и он выдает при вызове typeof(integer) -> type, как тебе кажется логичным. Что выдаст typeof(type)?

          это ты не "с другой стороны зашел", а результат typeof(type) может выдать либо ошибку, либо type в зависимости от реализации языка. и оба варианта будут логичными, а возврат typeof(integer) -> integer, в языке, где нет метатипизации и каждый тип зациклен на сам себя -- просто бессмысленно. именно поэтому в Oxygen и case требует ключевого слова type, чтобы отличать значения от типов. хотя и это непонятно, как буд-то компилятор не может отличить имя типа от переменной
            Цитата korvin @
            а результат typeof(type) может выдать либо ошибку, либо type в зависимости от реализации языка. и оба варианта будут логичными, а возврат typeof(integer) -> integer, в языке, где нет метатипизации и каждый тип зациклен на сам себя -- просто бессмысленно.

            Э, нет.
            1. type.getType выдает ошибку. Но getType - атрибут любого типа, и если его нет, то type типом не является и не может быть выдан как результат getType.
            2. Выдает опять type. Почему? И чем type.getType -> Type отличается от случая integer.getType -> integer?

            Добавлено
            Цитата korvin @
            именно поэтому в Oxygen и case требует ключевого слова type, чтобы отличать значения от типов. хотя и это непонятно, как буд-то компилятор не может отличить имя типа от переменной

            Там в case стоит экземпляр! И указываетя, что нужно получить его тип! не было бы type of - не скомпилировалось бы, из-за несоответствия типа.

            Добавлено
            Цитата korvin @
            а возврат typeof(integer) -> integer, в языке, где нет метатипизации и каждый тип зациклен на сам себя -- просто бессмысленно.

            Поясни.
              Цитата Romkin @
              Это тебя не смущает?

              тут почти все в порядке, но это не тоже самое, что писал ты для Delphi.
                Цитата D_KEY @
                тут почти все в порядке, но это не тоже самое, что писал ты для Delphi.

                Да что ты? Поясни, нафиг в Питоне type? Что, object - это не экземпляр своего типа? Дык вроде isinstance(object, object) истинно.
                  Цитата Romkin @
                  А type, значит, является экземпляром своего типа. И содержит все поля и методы всех своих экземпляров?

                  korvin, что выдает type.getType?

                  да, он может им быть т.к. экземплярами type являются типы и сам type является типом, то он может являться экземпляром самого себя. но экземплярами integer являются числа. является ли тип integer числом? и если типом integer является integer, то что вернет выражение (1 + integer)?

                  Добавлено
                  Цитата Romkin @
                  Цитата korvin @
                  а возврат typeof(integer) -> integer, в языке, где нет метатипизации и каждый тип зациклен на сам себя -- просто бессмысленно.

                  Поясни.

                  а что тут поянять? какой смысл в функции
                  ExpandedWrap disabled
                    typeof :: a -> a

                  ? при том, что операций над типами там не много, как ее использовать и зачем?
                    Цитата korvin @
                    и если типом integer является integer, то что вернет выражение (1 + integer)?

                    Э, тут ты складываешь тип с экземпляром, однако :)

                    Цитата korvin @
                    экземплярами type являются типы и сам type является типом, то он может являться экземпляром самого себя. но экземплярами integer являются числа.

                    Последний шаг: typeof не указывает экземпляром чего является аргумент, ты опять путаешь с isinstance. Он выдает именно тип аргумента. Просто нельзя сказать, что тип является экземпляром какого-то другого типа, и все. Он является типом, не объектом.

                    Добавлено
                    Цитата korvin @
                    ? при том, что операций над типами там не много, как ее использовать и зачем?

                    Потому что ссылка на тип может быть подана. И именно в дженерике она и подается, там стоит typeof(T). А typeof(integer) никому и не надо, результат и так понятен. Точно также как тебе не надо type.getType, с тем же результатом.
                    Здесь просто замыкание на себя на ступеньку раньше, поскольку type - излишняя сущность, если ты не можешь создать одновременно два разных типа integer.
                      Цитата Romkin @
                      Там в case стоит экземпляр! И указываетя, что нужно получить его тип! не было бы type of - не скомпилировалось бы, из-за несоответствия типа.

                      т.е. вот тут:
                      ExpandedWrap disabled
                        case aClass type of
                           TMyXYZClass: TMyXYZClass(aClass).DoSomething;
                           TMyOtherClass: TMyOtherClass(aClass).DoSomethingElse;
                        else raise new Exception('Неправильная ссылка на класс');

                      aClass -- это экземпляр? еще лучше, зачем нам ООП, наследование, полиморофизм, если у нас есть крутой case?

                      Добавлено
                      Цитата Romkin @
                      Э, тут ты складываешь тип с экземпляром, однако :)

                      так ты определись, типом integer является integer или все-таки что-то другое?

                      Добавлено
                      Цитата Romkin @
                      Последний шаг: typeof не указывает экземпляром чего является аргумент, ты опять путаешь с isinstance. Он выдает именно тип аргумента. Просто нельзя сказать, что тип является экземпляром какого-то другого типа, и все. Он является типом, не объектом.

                      нет, это ты путаешь. isinstance -- это двуместный предикат, возвращающий истину, если первый аргумент является экземпляром второго аргумента, а typeof -- это одноместный селектор, возвращающий тип своего аргумента
                        Цитата korvin @
                        так ты определись, типом integer является integer или все-таки что-то другое?

                        Да. А 1 - это не тип, это экземпляр этого типа. Сущности разные.
                        Цитата korvin @
                        aClass -- это экземпляр? еще лучше, зачем нам ООП, наследование, полиморофизм, если у нас есть крутой case?

                        Ой. Судя по эксепшену все-таки класс. Тогда действительно непонятно слово type.

                        Добавлено
                        Цитата korvin @
                        нет, это ты путаешь. isinstance -- это двуместный предикат, возвращающий истину, если первый аргумент является экземпляром второго аргумента, а typeof -- это одноместный селектор, возвращающий тип своего аргумента

                        А что, типа 1.isinstance(integer) - такой реализации быть не может вообще?
                          Цитата Romkin @
                          Просто нельзя сказать, что тип является экземпляром какого-то другого типа, и все.

                          поправка: в Oxygen нельзя
                            Цитата korvin @
                            поправка: в Oxygen нельзя

                            И нафиг не надо.
                            Вот беру я Питон, благо стоит:
                            ExpandedWrap disabled
                              >>> object.__class__
                              <class 'type'>
                              >>> object.__class__.__class__
                              <class 'type'>
                              >>> object.__class__.__class__.__class__
                              <class 'type'>

                            И втыкаешь... Вот в Delphi остановились на том, что классом object является object, а не какой-то мифический type, у которого есть все что и у object, но он им не является.
                              Цитата Romkin @
                              И втыкаешь... Вот в Delphi остановились на том, что классом object является object, а не какой-то мифический type, у которого есть все что и у object, но он им не является.

                              Если бы в Delphi были метаклассы, ты бы понял...
                                кстати в джаве можно:
                                ExpandedWrap disabled
                                  if (Integer.class instanceof Class) {
                                      System.out.println("Integer is a Class");
                                  }


                                Добавлено
                                Цитата Romkin @
                                Да. А 1 - это не тип, это экземпляр этого типа. Сущности разные.

                                супер. и 1 и integer являются экземпляроми integer, но при этом разные сущности. логичность так и прет
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 351 352 [353] 354 355 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5039 ]   [ 14 queries used ]   [ Generated: 31.07.26, 05:04 GMT ]