2017-03-24 26 views
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); 
+0

現時点では、ワーカーは囲みスコープの変数を見ることができません。 Ballerinaの現在のバージョンでは、デザインによって制限されています。しかし、この行動を改善するための議論はほとんどありませんでした。ここでは、他の変数を作業者に渡すことができます。現時点では、メッセージを渡すことしかできません。詳細については、https://github.com/ballerinalang/ballerina/blob/master/docs/specification/workers.mdを参照してください。 –

+0

@SameeraJayasoma現時点では、言語パーサはあまりにも制限的です。たとえば、ワーカーブロックのすぐ上にあるメッセージmを突き抜けてデータを渡すことはできないようです。また、ワーカー内で使用される\ @http :: BasePathセクションの上にグローバルエンドポイントEPを定義することもできません。 – geekaholic

+0

上記に追加するには、constである限りグローバルを定義することができました。定数グローバルのみを許可し、変数は許さないという設計上の理由はありますか? – geekaholic

答えて

0

新しいワーカーインタラクションのデザインで、バレリーナワーカーに任意の数の変数を渡すことができます。たとえば、デフォルトのワーカー(メイン)から別のワーカーW1に2つの変数を渡したいとします。ここにサンプルコードがあります。

import ballerina.lang.system; 

function main(string[] args) { 
int x = 10; 
string s = "Test"; 
x, s -> W1; 

worker W1 { 
int y; 
string t; 
y,t <- default; 
system:println("Inside worker " + y + " " + t); 

} 
} 
関連する問題