2017-04-03 3 views
1

언어로 실험 한 결과 select은 전역 범위에 정의되어 있으며 그 우선 순위는 로컬 변수보다 높습니다."선택시기"구문은 무엇입니까?

def example(select) 
    puts select 
end 
example 3 
# Syntax error in eval:3: unexpected token: end (expecting when, else or end) 

그래서 단계별로 선택 단계 실험 내가 얻을이 :

select 1 end 
# Syntax error in eval:3: unexpected token: end (expecting when, else or end) 

다음 다음

select when x = 1 end 
# Syntax error in eval:1: invalid select when expression: must be an assignment or call 

다음

select when 1 end 
# Syntax error in eval:1: invalid select when expression: must be an assignment or call 

select when x 
# Syntax error in eval:1: unexpected token: EOF (expecting ',', ';' or ' 
당신이 내 질문에 왔어요 방법에 대한 아이디어를 가지고 있어야 나는 앞으로 몇 단계를 건너 뛸 수 있습니다

...

select when x; 
else y 
end 
# Error in line 1: undefined local variable or method 'x_select_action' 

그리고 마지막으로

x_select_action = 4 

select when x; 
else y 
end 
# Error in line 3: undefined method 'x_select_action' (If you declared 'x_select_action' in a suffix if, declare it in a regular if for this to work. If the variable was declared in a macro it's not visible outside it) 

그래서이 키워드가 지역 변수 선행에 앞선 언어로, 나는 그것이 무엇을위한 것인지 모른다. 그러나 x이 when 절로 주어 졌을 때 분명히 x_select_action을 찾습니다. 이 내용은 무엇입니까? select은 어떻게 사용 되나요?

온라인 검색 Enumerable, Hash, Channel 및 Array ...에 정의 된 select을 참조하십시오. 그러나 언뜻보기에는 이들이 그럴 것 같지 않습니다.

도움 주셔서 감사합니다. 그것에 대해 어떤 문서가 아직 없습니다 이유, https://tour.golang.org/concurrency/5

하지만 여전히 일부 미 조정이 완료되어야합니다 :

답변

2

이의 선택 이동과 유사합니다.

+0

감사합니다. 이 기능에 대한 홍보가 있습니까? –

+1

거기 가서 : https://github.com/crystal-lang/crystal/pull/3130 –