Как заставить Transcrypt скомпилировать объект, а не dict? - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь использовать API выборки из Transcrypt.

Источник:

headers = {
    "Access-Control-Request-Method": "GET",
    "Access-Control-Request-Headers": "origin, x-requested-with",
    "Origin": "https://bar.com/"
}

args = {
    "method":"OPTIONS",
    "headers":headers
}

fetch("https://foo.com/",args).then(
    lambda response: print(response),
    lambda err: print(err)
)

Компилируется в:

var headers = dict ({'Access-Control-Request-Method': 'GET', 'Access-Control-Request-Headers': 'origin, x-requested-with', 'Origin': 'https://bar.com/'});
        var args = dict ({'method': 'OPTIONS', 'headers': headers});
        fetch ('https://foo.com/', args).then ((function __lambda__ (response) {
            return print (response);
        }), (function __lambda__ (err) {
            return print (err);
        }));

Отпечатки:

TypeError: Failed to execute 'fetch' on 'Window': Iterator is not an object.

Если я удаляю dict s из скомпилированного кода, он запускается.

Как я могу скомпилировать в нужный объект Javascript вместо dict?

1 Ответ

0 голосов
/ 19 мая 2018

Понял сейчас.

Оказывается, что:

https://www.transcrypt.org/docs/html/special_facilities.html#create-bare-javascript-objects-and-iterate-over-their-attributes-from-python-pragma-jsiter-and-pragma-nojsiter

Обычно литерал Python {...} компилируется в dict ({...}) чтобы включить специальные атрибуты и методы Python dict, включая, например, итератор.Когда pragma ('jsiter') активен, литерал Python {...} компилируется в пустой {...} без специальных атрибутов или методов.Чтобы все еще иметь возможность перебирать атрибуты такого голого объекта JavaScript из Python, когда pragma ('jsiter') активен, Python для ... in ... буквально переводится в JavaScriptдля (вар ... в ...).Основным вариантом использования этой прагмы является удобный цикл по атрибутам класса в методе new метакласса.В качестве более гибкой, но менее удобной альтернативы можно использовать pragma ('js', '{}', '' '...' '').

Поэтому код должен быть:

__pragma__('jsiter')

headers = {
    "Access-Control-Request-Method": "GET",
    "Access-Control-Request-Headers": "origin, x-requested-with",
    "Origin": "https://bar.com/"
}

args = {
    "method":"OPTIONS",
    "headers":headers
}

__pragma__('nojsiter')
...