1

私は基本的に、レガシーコードがSmalltalk言語で記述されているレガシーシステムに取り組んでおり、Smalltalkの一部のメソッドをJavaの同等のメソッド名に変換しようとしています。これらは、と呼ばれるクラスのSmalltalkのメソッド名の一部ですGrid。Smalltalk構文に精通していません。Javaで対応する名前はどのようになり、メソッドのシグネチャはどのようになりますか?

  1. at: cell put: data
  2. foreColor: color1 backColor: color2 cell: cell
4

2 に答える 2

7

Smalltalk は、Objective C と同様にインライン パラメーターを使用します。Java (および Algol から派生した他のほとんどの言語) では、複数のパラメーターを使用している場合、このスタイルは不可能です。したがって、インライン パラメーターを含む Smalltalk メッセージを Java メソッドに変換する規則を使用する必要があります。

  • Cocoa Java バインディングは、アンダースコアを使用してメッセージ名を結合し、パラメーターを次の順序で追加しますat_put(cell, data)foreColor_backColor_cell(color1, color2, cell)

  • キャメル ケースのバリアントを使用することもできます。ただし、これにより名前の衝突が発生する可能性があります (たとえば、Smalltalk メッセージがある場合、 に短縮するatPutことはできません) 。at:put:atPut

inline-parameters の変換とは別に、Smalltalk コードが予約済みキーワードを使用しているという問題に遭遇する可能性もあります。たとえば、forは Smalltalk では完全に有効なメッセージですが、Java メソッドに名前を付けてはなりませんfor。このような場合は、エスケープ戦略を採用する必要があります。たとえば、Java メソッドが になるようにアンダースコアを付けるなどfor_です。

于 2012-09-06T13:44:34.633 に答える
2

ところで、それは間違った働き方です。Java 出力が必要な場合は、経験豊富な smalltalker にソースから生成してもらいます。Smalltalk には優れたリフレクション機能があり、Java スケルトンを簡単に生成できます。smalltalk をレガシー言語に変換する際のより興味深い問題は、blocks と perform: で発生します。

于 2012-09-09T21:30:04.693 に答える