2
私は労働者の内側になるようにいくつかのコードをリファクタリングしようと、エラーを取得しています:バレリーナワーカーに変数を渡すにはどうすればよいですか?
未定義のシンボルのユーザーID
は、労働者がそれ以上のスコープからの変数を参照することができないようです。どのようにすれば、渡されたパラメータを作業者に見させることができますか?
import ballerina.net.http;
import ballerina.lang.messages;
import ballerina.lang.jsons;
@http:BasePath ("/foo")
service barApi {
http:ClientConnector endpointEP = create http:ClientConnector("http://example.com");
@http:GET
@http:Path("https://stackoverflow.com/users/{userId}")
resource users (message m,
@http:PathParam("userId") string userId) {
worker sampleWorker(message m) {
string requestPath = "/user/" + userId;
message response = http:ClientConnector.get(endpointEP, requestPath, m);
現時点では、ワーカーは囲みスコープの変数を見ることができません。 Ballerinaの現在のバージョンでは、デザインによって制限されています。しかし、この行動を改善するための議論はほとんどありませんでした。ここでは、他の変数を作業者に渡すことができます。現時点では、メッセージを渡すことしかできません。詳細については、https://github.com/ballerinalang/ballerina/blob/master/docs/specification/workers.mdを参照してください。 –
@SameeraJayasoma現時点では、言語パーサはあまりにも制限的です。たとえば、ワーカーブロックのすぐ上にあるメッセージmを突き抜けてデータを渡すことはできないようです。また、ワーカー内で使用される\ @http :: BasePathセクションの上にグローバルエンドポイントEPを定義することもできません。 – geekaholic
上記に追加するには、constである限りグローバルを定義することができました。定数グローバルのみを許可し、変数は許さないという設計上の理由はありますか? – geekaholic