1. JavaScript / Говнокод #27808

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    function test_nest_capture_of_this() {
        let deck = {
            val: 1,
            funcWithCapture: function () {
                return () => {
                    return this.val;
                };
            },
        };
    
        let funcInst = deck.funcWithCapture();
        print(funcInst());
    }
    
    function main() {
        test_nest_capture_of_this();
        print("done.");
    }

    а вот мой компилятор может так говнокодить .. а ваш? (коментов не будет - сайт все блокирует) на этот раз скину дампик
    https://pastebin.com/MXVLGnGM

    результат работы

    C:\temp\MLIR_to_exe>1.exe
    1
    done.

    Запостил: ASD_77, 10 Ноября 2021

    Комментарии (14) RSS

    • неужели некому нечего сказать ?
      Ответить
      • Я не понимаю нахуя это вообще надо. Тут еще "this" какой-то еще. У меня нет никакого "this". Покажи более реальный пример. А то это можно очень легко переписать в виде
        printf("1\ndone.\n");
        Ответить
        • > у меня нет никаких "this"

          Что для ООПшника фичи языка, то сишнику просто паттерны из указателей и структур.
          Ответить
          • Надо сделать в "Си" такую фичу: специальные функции, в которых указатель на структуру передается неявным аргументом.
            Ответить
            • Ну можно как в "lua", особым синтаксисом при вызове.

              Пусть foo:->bar означает foo->bar(foo).

              Или макрос наебенить как обычно.
              Ответить
            • #include <stdio.h>
              #include <stdlib.h>
              
              #define F(a, b) typeof( a (*) b )
              
              
              typedef struct someshit
              {
                int shit;
                F(int, (struct someshit *)) getshit;
                F(void, (struct someshit *, int)) setshit;
              } someshit;
              
              int getshit(someshit *sht)
              {
                return sht->shit;
              }
              
              void setshit(someshit *sht, int a)
              {
                sht->shit = a;
              }
              
              #define GETSHIT(a) a.getshit(&a)
              #define SETSHIT(a,b) a.setshit(&a,b)
              
              int main(void)
              {
                someshit my_shit = {0, getshit, setshit};
                printf("%d\n", GETSHIT(my_shit));
                SETSHIT(my_shit, 10);
                printf("%d\n", GETSHIT(my_shit));
                return EXIT_SUCCESS;
              }

              https://wandbox.org/permlink/77NItVP2l8aI6dhE
              Ответить
              • На каждый "метод" по макросу как-то неудобно писать. Да и придётся избегать одинаковых "методов" в разных "интерфейсах".
                Ответить
      • Вот так чтоли https://wandbox.org/permlink/qyAQoYcKhvZGQjwu ?
        #include <stdio.h>
        #include <stdlib.h>
        
        #define F(a, b) typeof( a (*) b )
        
        
        void test_nest_capture_of_this()
        {
          typedef struct deck_struct
          {
            int val;
            F(int, (struct deck_struct *)) func;
          } deck_struct;
        
          int deck(struct deck_struct *str)
          {
            return str->val;
          }
          struct deck_struct funcInst =
          {
            .val = 1,
            .func = &deck
          };
          printf("%d\n", funcInst.func(&funcInst));
        }
        
        int main(void)
        {
          test_nest_capture_of_this();
          printf("done.\n");
          return EXIT_SUCCESS;
        }
        Ответить
        • тут что-то очень умное.. не могу оценить...
          Ответить
          • Из нестандартного тут только nested funtion и typeof (это GCC расширения).
            https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
            https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
            Ответить
          • Послушал на днях рояльную прелюдию Рахманинова, ужаснулся. А ведь у молодежи 40-50 годов не было ничего кроме этой лабуды и по радио звучали только партийные лозунги.
            Ответить

    Добавить комментарий