Haxe 4.2.1 출력python 코드 결과

25901 단어 Pythonhaxetech

개요


최근에 파이톤을 처음 만졌을 때 개인적으로 코드 블록의 축소 기준을 좋아하지 않아서 슈퍼마켓 패키지를 찾았는데 헥스'hax(Youtube 조사)'https://haxe.org/를 발견했다.
토바이트 코드가 아니라 파이톤의 원본 코드를 연결할 수 있기 때문에 기존의 파이톤 코드와 키메라와 합체할 수 있습니까?그렇게 생각하면서 만져봤어요.
  • 파이톤으로 전송하는 방법은 다음과 같다.
    https://haxe.org/manual/target-python-getting-started.html
  • 컨디션


    Haxe: 4.2.1

    코드 1


    Haxe


    Main.hx
    class Main {
      static public function main():Void {
        trace("Hello World");
      }
    }
    
    파일 이름이 반 이름과 다르면 안 돼요?

    Python


    전송 명령: haxe --python main.py --main Mainmain.py
    # Generated by Haxe 4.2.1+bf9ff69
    # coding: utf-8
    import sys
    
    
    
    class Main:
        __slots__ = ()
    
        @staticmethod
        def main():
            print("Hello World")
    
    
    class haxe_iterators_ArrayIterator:
        __slots__ = ("array", "current")
    
        def __init__(self,array):
            self.current = 0
            self.array = array
    
        def hasNext(self):
            return (self.current < len(self.array))
    
        def next(self):
            def _hx_local_3():
                def _hx_local_2():
                    _hx_local_0 = self
                    _hx_local_1 = _hx_local_0.current
                    _hx_local_0.current = (_hx_local_1 + 1)
                    return _hx_local_1
                return python_internal_ArrayImpl._get(self.array, _hx_local_2())
            return _hx_local_3()
    
    
    
    class python_internal_ArrayImpl:
        __slots__ = ()
    
        @staticmethod
        def _get(x,idx):
            if ((idx > -1) and ((idx < len(x)))):
                return x[idx]
            else:
                return None
    
    
    class python_internal_MethodClosure:
        __slots__ = ("obj", "func")
    
        def __init__(self,obj,func):
            self.obj = obj
            self.func = func
    
        def __call__(self,*args):
            return self.func(self.obj,*args)
    
    
    
    
    Main.main()
    
    크다

    코드 2


    Haxe


    Main.hx
    class Main {
      static public function main():Void {
        trace("Hello World");
    
        var items = ["a", "b", "c"];
        for (index in 0...items.length) {
            trace('$index : ${items[index]}');
        }
        if (items.length == 3) {
            trace('length is ');
            trace('3');
        } else {
            trace('length is ');
            trace('not 3');
        }
        trace('end');
      }
    }
    
    
    관건적인 인코딩 블록을 만들어 보았다.

    Python


    전송 명령: haxe --python main.py --main Mainmain.py
    # Generated by Haxe 4.2.1+bf9ff69
    # coding: utf-8
    import sys
    
    
    
    class Main:
        __slots__ = ()
    
        @staticmethod
        def main():
            print("Hello World")
            items = ["a", "b", "c"]
            _g = 0
            _g1 = len(items)
            while (_g < _g1):
                index = _g
                _g = (_g + 1)
                print(str(((("" + str(index)) + " : ") + HxOverrides.stringOrNull((items[index] if index >= 0 and index < len(items) else None)))))
            if (len(items) == 3):
                print("length is ")
                print("3")
            else:
                print("length is ")
                print("not 3")
            print("end")
    
    
    class haxe_iterators_ArrayIterator:
        __slots__ = ("array", "current")
    
        def __init__(self,array):
            self.current = 0
            self.array = array
    
        def hasNext(self):
            return (self.current < len(self.array))
    
        def next(self):
            def _hx_local_3():
                def _hx_local_2():
                    _hx_local_0 = self
                    _hx_local_1 = _hx_local_0.current
                    _hx_local_0.current = (_hx_local_1 + 1)
                    return _hx_local_1
                return python_internal_ArrayImpl._get(self.array, _hx_local_2())
            return _hx_local_3()
    
    
    
    class python_internal_ArrayImpl:
        __slots__ = ()
    
        @staticmethod
        def _get(x,idx):
            if ((idx > -1) and ((idx < len(x)))):
                return x[idx]
            else:
                return None
    
    
    class HxOverrides:
        __slots__ = ()
    
        @staticmethod
        def stringOrNull(s):
            if (s is None):
                return "null"
            else:
                return s
    
    
    class python_internal_MethodClosure:
        __slots__ = ("obj", "func")
    
        def __init__(self,obj,func):
            self.obj = obj
            self.func = func
    
        def __call__(self,*args):
            return self.func(self.obj,*args)
    
    
    
    
    Main.main()
    
    아니다for!index in ...에 전화해서 그런가?뭐, 코드 블록은 어쨌든 고마워요.
    그리고 HxOverrides의 증가도 있었다.

    알아차리다

  • 호환성을 위해 균형기 코드를 넣었지만 논리적으로 사용하지 않았다.그곳은 트리쇼킹을 당하지 않을 것 같다.하지만 정말로 전화선을 썼다면 100% 나왔을 텐데 낭비잖아요.
  • ptyhon의 패키지 관리자(pyenv나poetry 등)로Haxe를Virtualenv 범위로 만들 수 있다면 좋을 것 같습니다.
  • 다른 관심사

  • python의 제3party library 사용 방법
  • IDE 보완 전력
  • 좋은 웹페이지 즐겨찾기