2016-09-15 15 views
4

Pythonで書かれたAnkiというフラッシュカードプログラムを使用します。私は最初のアドオンを書きたいと思う。私はPythonが初めてです。私は技術者ではありませんが、Java、C++、C#などで他の人のコードの中を飛び回ってきた経験は数年あります。これらの引数の意味は?

フラッシュカードに「Capital of France?」などの質問が表示されます。 「回答を表示」ボタンが押されると、アンキは答え「パリ」を表示する。

このテキストが表示される前に、このテキスト「パリ」を取りたいと思っています。

私はAnkiコードのこの時点で到着しました。この瞬間、カードには「Capital of France?」と表示されます。答えはまだ空です。私は "val"( "パリ"だと思う)をつかみ、それを私のアドオンで使うことができると思う。

def _getTypedAnswer(self): 
    self.web.evalWithCallback("typeans ? typeans.value : null", self._onTypedAnswer) 

def _onTypedAnswer(self, val): 
    self.typedAnswer = val   
    self._showAnswer() 

私はこれの意味を見つけようとするグーグルでてきた:

("typeans ? typeans.value : null", self._onTypedAnswer) 

私はすべてのコードへのアクセス権を持っている、と私は応答に役に立つかもしれない任意のコードを提供することができます。

ありがとうございました。


追加:レスポンダからの質問後。

アンキは、コンピュータ上またはインターネット上で実行できます。カードを勉強した結果はすべて同期されるので、エンドユーザーが関心を持つ限り、どちらの方法にも違いはありません。


"のWebView" クラスから:

def evalWithCallback(self, js, cb): 
    self.page().runJavaScript(js, cb) 

"校閲" クラスは、質問と回答を示しています。校閲ウィンドウが

(「メインウィンドウ」の)「MW」はここでクラス「投稿者」

def __init__(self, mw): 
    self.mw = mw 
    self.web = mw.web 
+0

Pythonの構文ではありませんが、 "Ternary if"と呼ばれています - https://en.wikipedia.org/wiki/%3F: –

+1

を参照してください。多少の外部言語、メソッド名に "web")。 Pythonには、typeans?typeans.value:null ""は単なる文字列です。コードとして使用しているものは何でもPython以外のものです。 'self.web'とは何ですか? 'evalWithCallback'のコードはありますか? – BrenBarn

+0

私はself._showAnswer()があなたの傍受をターゲットにするより良い場所だと思います。 TypedAnswerは、型付きのコンテンツを収集していることを示しています。ボタンがクリックされたときに表示される答えではないかもしれないが、わかりにくい。 – dodell

答えて

1

typeans ? typeans.value : nullC/C++/C#(そしておそらくJavaのも覚えていない)コードであるためのinit文のです(疑似コード)に相当する

if typans: 
    return typeans.value 
else: 
    return null 

("typeans ? typeans.value : null", self._onTypedAnswer)は、このコード行を文字列として含むタプルです。

+3

このコンテキストではタプルではありません。引数リストです。 – BrenBarn

+0

pythonに相当するのは: 'type =" typeans else Noneの場合はtypeans.value " – nonsensei

+1

@nonsensei、またはおそらく' a = getattr(typeans、 'value'、None) 'ユースケースに応じて... –

0

コード内で目的の変数が見つかる場所を見つけたら、この情報を独自のコードに抽出する方法はいくつかあります。

ソースを直接操作できる場合は、質問に表示されているメソッド内の別のオブジェクトにvalを属性として割り当てることができます。例えば

:ところで

def _onTypedAnswer(self, val): 
    self.typedAnswer = val 
    myobj.answer = val 
    # or call a method on myobj to break flow 
    # myobj.method(val) 
    self._showAnswer() 
0

typeansの正確な(かつ有効な)Pythonの同等?タイプン。値:nullのです:文字列"typeans ? typeans.value : null"とメソッドオブジェクトself._onTypedAnswer

typeans and typeans.value or None 
+0

' and'/'または'構造体は以下のように書かれています: 'typeans.value if type else None' - Pythonに' null'がありません... –

+0

あなたは絶対に正しいです。以前の返信からnullをコピーしました – Andrei

0
self.web.evalWithCallback("typeans ? typeans.value : null", self._onTypedAnswer) 

これはちょうど2つの引数を持つevalWithCallbackメソッドを呼び出します。

def evalWithCallback(self, js, cb): 
    self.page().runJavaScript(js, cb) 

のでevalWithCallbackは、文字列を受け取り、JavaScriptのようにそれを実行します:あなたはevalWithCallbackがあなたの投稿コードからこれで何を見ることができます。これからコールバックがどのように呼び出されるかは明確ではありませんが(例えば、どの引数が呼び出されるかなど)、コードの本質は文字列typeans ? typeans.value : nullをJavaScriptとして実行し、次に関数self._onTypedAnswerを呼び出します。私の推測では、引数が_onTypedAnswerに渡されたことは、JS式を評価した結果になると考えられます。

ちなみに、「型付き回答」という名前から判断すると、valは正しい答えではなく、ユーザーの推測値(つまり、ユーザーが入力した値)であると推測します。

関連する問題