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