2017-03-24 4 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

근로자는 현재 해당 범위에서 변수를 볼 수 없습니다. 그것은 발레리나의 현재 버전에서 디자인에 의해 제한됩니다. 그러나 우리는 당신이 다른 변수를 작업자에게 넘겨 줄 수있는 곳에서이 행동을 개선하기위한 토론을 거의하지 못했습니다. 현재 메시지를 전달할 수 있습니다. 자세한 내용은 https://github.com/ballerinalang/ballerina/blob/master/docs/specification/workers.md를 참조하십시오. –

+0

@SameeraJayasoma 현재 언어 구문 분석기는 너무 제한적입니다. 예를 들어 작업자 블록 바로 위의 메시지를 통해 데이터를 전달할 수있는 메시지를 변경할 수없는 것처럼 보입니다. 또한 worker 내에서 사용되는 \ @http :: BasePath 섹션 위에 global endpointEP를 정의 할 수 없습니다. – 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); 

} 
}