2016-12-12 3 views
3

私はDrRacketのテキストウィンドウ内にpictや構文オブジェクトのような新しいGUI要素を作成しようとしています。私が知る限り、これを行う最も標準的な方法はsnip%です。Racketで新しいスナップ%を作成する

残念ながら、creating new snipsのドキュメントは、包括的ではありませんが、少しは解読できないものであり、回答にはいくつかの質問が残されています。

まず、snip%snip-class%の違いは何ですか?なぜ、これらを単に1つのクラスにまとめるのではなく、2つのクラスに分ける必要があるのですか?複数のスナップショットが1つのスナップクラスを使用するためですか?

第2オフは、snip-reader<%>とは何ですか?なぜ別のクラスにする必要があるだけでなく、モジュールをインストールする必要があるのはなぜですか? 新しいクラスにする必要がある場合は、なぜ直接参照することはできません。なぜこの形式の文字列を構築して構文解析するのかというこの全プロセスを経て、"(lib ...)\n(lib ...)"

つまり、このデザインには何らかの理由がある可能性があります。古いAPIの残り物かもしれません。もしそうなら、もっと一貫性のある新しいAPIを作ることを考えていた人はいますか?または、このデザインの理由がある場合は、ドキュメントが明確でないように、それが何であるか教えてください。

今のところ、sample given in the docsをコピーして貼り付けて、新しい切り取りを作成することができます。しかし、私はここで起こっているデザインを理解するのに苦労しているので、適切に使うことができます。

私はそれを行うための他の方法があることは知っていますが、私はまた対話的なボタンとそれ以外のものを持っていると思います。

私はそれはそれ自体がライブラリとしてインストールする必要ません知っているが、ドキュメントが強く、その方向にあなたをプッシュするようです。

+0

snip-reader%にはsnip%とは別のクラスがあると思われます。非GUIプログラムのsnipを扱うことができます(snip-reader%はwxmeに属しています)。 – soegaard

+0

FWIW: 'editor%' vs 'editor-class%'と同じデザインパターンが使用されています – soegaard

+0

'editor-class%'が見つかりませんでしたが、 'editor-data-class%'が見つかりました。それはあなたもあまりにも参照している? –

答えて

0

さて、私は最終的に答えを見つけたと思います。大まかに言えば、

snip%クラスには、スナップを描画し、画像のために確保するスペースの大きさを教え、マウスクリックなどのイベントを処理するメソッドが含まれます。

次に、snip-class%クラスが、切り抜きのエンコードとデコードに使用されます。これは別のクラスでなければなりません。なぜなら、ファイルに保存するとき、エディタはそれがどのタイプの切り抜きをエンコードする必要があるからです。明らかな理由から、文字通りsnip%クラスをそこに入れることはできません。ファイルに格納される値はsnip-class%の 'クラス名'です。これは何でもかまいません。エディタのクラス名がsnip-class%に関連付けられている限り、それをロードできます。さらに、"(lib ...)"または"(lib ...) (lib ...)"という形式の場合、Racketはそれを自動的にリストにロードします。

それだけでインストールする必要はありません。それについては、最も簡単な方法です。それ以外の場合は、実際にファイルをロードする前に、スナップを処理する方法をエディタに手動で伝える必要があります。

関連する問題