問題タブ [xbase]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - xBaseJ で IDX インデックスを使用できますか
IDX インデックス ファイルを含む DBF があります。xbase自体は扱えるようですが、xbasejでクラスが書かれているようには見えません。xbasejでIDXファイルを使用した人はいますか?
xbase への参照: http://www.clicketyclick.dk/databases/xbase/format/idx_comp.html
java - ScopeProvider で参照されたオブジェクトを呼び出す際のエラー「循環リンクが検出されました」
現在、Xtext DSL の相互参照を実装しています。dsl ファイルには複数の XImportSection を含めることができ、特殊なケースでは XImportSection にすべての import ステートメントが含まれているとは限りません。これは、正しい XimportSection を見つけてビルドするには、「XImportSectionNamespaceScopeProvider」をカスタマイズする必要があることを意味します。実装中に、エディターや検証の予期しない動作を見つけました。
実装をテストするために切り取った次の DSL コードを使用しました。
DSL ソース コードは、次の文法規則によって記述されます (完全ではありません!)。
より優れたツール サポートを提供するために、aModifiesUnit
は変更されたクラスを参照します。この Xtext 固有の実装により、クラスへのハイパーリンクが可能になります。
現在、のすべての名前空間スコープを提供するカスタマイズされた XImportSectionScopeProvider に取り組んでいModifiesUnit
ます デフォルトの実装はメソッドを含みprotected List<ImportNormalizer> internalGetImportedNamespaceResolvers(EObject context, boolean ignoreCase)
、ソース ファイルにクラスのような要素が 1 つしかないことを前提としています。しかし、私の言語では、複数存在する可能性があります。このため、カスタマイズする必要があります。
私の考えは、次の実装です (Xtend プログラミング言語を使用):
この作業を開始する前に、参照は正常に機能し、予期しないことは何も起こりませんでした。ModifiesUnit
私の目標は、JVM タイプへの参照を解決するために Xbase によって使用される、カスタマイズされた XImportSection を構築することです。そのためには、参照先の XImportSection のコピーが必要ですClassOrInterface
。XImportSection にアクセスするには、まず を呼び出しますModifiesUnit.getUnit()
。この呼び出しが実行された直後に、エディターは予期しない動作を示します。エラーにつながる最小限の実装は次のようになります。
ここで、私は内部で何が起こっているのかわかりません!しかし、それは誤差を計算します。エディターは、(1) の修飾名に次のエラーを表示します: 「Cyclic linking detected : ModifiesUnit.unit->ModifiesUnit.unit」。
私の質問は次のとおりです。それはどういう意味ですか? Xtext でこのエラーが表示されるのはなぜですか? 参照されたオブジェクトにアクセスすると表示されるのはなぜですか?
私はそこで奇妙なことも考え出しました: 私の最初のアプローチでは、私のコードはNullPointerException
. わかりました、オブジェクトを印刷して理由を理解しようとしましたci
。結果は次のとおりです。
このメソッドは 2 回実行され、Xtext は 1 回目と 2 回目の実行の間でプロキシを解決しているようです。一度受け取ったオブジェクトが正しいものであれば、私にとっては問題ありません。if-instanceof ステートメントで処理します。
しかし、なぜそこに 2 つの参照があるのでしょうか。ClassDeclaration (2b) の抽象的なスーパールールのみである ParserRule ClassOrInterface (2a) に依存していますか? しかし、Xtext が ClassOrInterface の参照を解決できないのはなぜですか?
lambda-calculus - ブロック内の外部変数と Y コンビネータにアクセスする
皆さんが元気であることを願っています。Harbor で固定小数点Y コンビネータを実装していますが、問題が発生しています。Y コンビネータは、ラムダ計算によって次のように定義できます。
Y = (λh.λF.F(λ x.((h(h))(F))(x))) (λh.λF.F(λ x.((h(h))(F))(x)))
パフォーマンスの質問で、Y-combinator を使用してメモ化を適用しようとしています。私の現在の実装は次のとおりです。
基本的に、ブロック内でステートメントを使用することはできませんが、式を使用することはでき、問題なく動作します。私は無限再帰と、0から無限までの制限を回避しています。
ここまでは問題なくコンパイルできますが、外側のブロックの変数にアクセスしようとすると、Harbor に顔を蹴られてしまいます。
Y コンビネーターの実装をテストするために、フィボナッチ数列の単純な実装を適用しようとしましたが、パラメーターを受け取るG
ブロックを返し、パラメーターを受け取るブロックを暗黙的に返すと、使用できなくなりN
、G
コンパイラーは「外側のコードブロック変数に到達できません。」
これにより、ブロックをカリー化することもできます。私の質問は、ハーバーでブロック内の外部変数にアクセスするにはどうすればよいですか?
abstract-syntax-tree - Xbase XExpressions をプログラムでインスタンス化する
Xbase 文法の一部を使用する Xtext プロジェクトに取り組んでいます。私のコードでは、Java コードを生成するために DSL プログラムを分析しています。XExpression
を使用して既存のものを Java コードに変換するのは簡単ですXbaseCompiler
が、それは私が必要としているものではありません。代わりに、別のプログラムを生成する必要があります。
現在、私は単純に Java コードを生成しています (つまり、文字列を構築しています)。私がやりたいのは、新しい を構築しXExpression
、おそらく元の の一部を使用して、それを Java にコンパイルすることです。
さまざまなXExpression
s にはゼロ引数のコンストラクターがあるため、1 つをインスタンス化し、いくつかのプロパティを設定することさえ試みました。ただし、コンパイラがクラッシュし、欠落しているプロパティを特定できません。
oop - OOP - ビジュアル オブジェクト: VO は C#/Java インターフェイス (戦略設計パターン用) などのインターフェイスをサポートしていますか?
私は C#/Java 開発者で、新しい仕事で Visual Objects (VO、Computer Associates のラフ モード: VO = OO-Clipper) で開発されたレガシー システムがあり、いくつかのモジュールを修正して実装する必要があります。ここにいくつかのパターン (すなわち: 戦略パターン) (VO はオブジェクト指向言語です)。ただし、VO 2.5 リファレンス マニュアルがありますが、C# や Java のような「インターフェイス クラス」への参照が見つかりませんでした。
VO リファレンス マニュアルでは、ポリモーフィズムと継承をサポートしていると書かれていますが、インターフェイス、ジェネリックなどについては言及されていません。
この言語がかなり古いことは知っていますが、このレガシー システムはまだ本番環境にあり、日常的にこれを使用するクライアントがいくつかあります。新しいバージョンは C# で開発されていますが、従来のバージョンを維持する必要があります。
VOがインターフェイスをサポートしているかどうか、またはサポートしていない場合は、そのようなもの(インターフェイスとこれらのインターフェイスを実装するクラス)を開発する方法を知っている人はいますか?
前もって感謝します。
python - dbf モジュールでレコードを更新する方法
dbfモジュールを使用してdbfのレコードを更新するにはどうすればよいですか: https://pypi.python.org/pypi/dbf
これが私が試したものです:
しかし、私は得る:
データの読み取りと追加はできましたが、変更はできませんでした。どうすればよいですか?