とを使用して作成した閉路グラフがdosync
ありref-set
ます。これを渡すと、予想どおりにがprintln
得られます。これjava.lang.StackOverflowError
は、無限にネストされた構造を効果的に印刷しようとしているためです。
私がそうすると、構造を横断してすべてを印刷しようとしない(str my-ref)
ように見えるものが作成されることがわかりました。これにより、当面の問題は解決されますが、自分が何に注意を払っている場合にのみ役立ちます。 vertex@23f7d873
m画面に印刷します。ある種のカスタムテキスト(おそらくを含む)として、そして他の非参照のものを通常どおり(println my-graph)
に印刷するように呼び出すことができるようにしたいと思います。ref
str
現在、構造体の各要素を独自に印刷し、の印刷を完全にスキップするカスタム印刷関数がありref
ます。(見ることvertex@23f7d873
は実際にはあまり有用ではないことがわかります)。これは使いにくく、REPLでのカジュアルな検査の妨げになります。また、swank.core/break
デバッグ中にEmacsの検査官が検査を行うのを妨げます。
1つの詳細は、実際には、私が通常印刷しようとしている他のいくつかのものも含むref
aの値です。defstruct
だから私はどの道を進むべきか疑問に思っています。私はこれらのオプションを見ます:
- プロトコルを理解して私のed構造に
extend-type
適用し、遭遇したときに正しく機能するようにします。これには、構造体のフィールドごとの検査と、構造体に関しては特別な場合が必要ですが、少なくとも、構造体を含むものではなく、構造体に問題を特定します。CharSequence
defstruct
ref
ref
CharSequence
に遭遇したときにプロトコルをオーバーライドする方法を理解しますref
。これにより、さらにローカライズされた動作が可能になり、構造体の内部にない場合でも、REPLで循環参照を表示できます。これは私の好みのオプションです。toString
私がするとき、あるレベルで呼ばれると私が信じる何かをする方法を理解してくださいprintln
。私はこのオプションについて最も無知です。他のものについてもかなり無知ですが、私は読んJoy of Clojure
でいて、今はすべて刺激を受けています。
同様に、この解決策は、循環参照を印刷しようとするときに通常はバーフする他のすべてのものに適用する必要がprint
あります。pprint
どのような戦略を採用する必要がありますか?
ご入力いただきありがとうございます。