그것은을위한 루프는 "가짜"입니다 수 있도록하지 break
그것을 할 수 있습니다. 아래 저하 코드를 살펴 :
julia> foo() = [(i,i^2) for i in 1:100 if i^2%5==0]
foo (generic function with 1 method)
julia> @code_lowered foo()
LambdaInfo template for foo() at REPL[0]:1
:(begin
nothing
#1 = $(Expr(:new, :(Main.##1#3)))
SSAValue(0) = #1
#2 = $(Expr(:new, :(Main.##2#4)))
SSAValue(1) = #2
SSAValue(2) = (Main.colon)(1,100)
SSAValue(3) = (Base.Filter)(SSAValue(1),SSAValue(2))
SSAValue(4) = (Base.Generator)(SSAValue(0),SSAValue(3))
return (Base.collect)(SSAValue(4))
end)
출력 array comprehension
가 입력 반복자 소요 Base.Generator
통해 구현되는 것을 나타낸다. 이제는 [if cond(x)::Bool]
"guard"만 지원하므로 break
을 사용할 방법이 없습니다. 특정 사례를 들어
는 해결 방법은 isqrt
을 사용하는 것입니다
julia> X=[(i,i^2) for i in 1:isqrt(1000) if i^2%5==0]
6-element Array{Tuple{Int64,Int64},1}:
(5,25)
(10,100)
(15,225)
(20,400)
(25,625)
(30,900)
나중에 질문이 있습니다 http://stackoverflow.com/questions/44101965/array-comprehension-with-a-random-output-in-julia (편집 : 더 최근 답변) 여기에 의견이있었습니다 루프를 작성하는 것이 좋습니다. 나는 이것에 동의한다. 이것은 단지 제기 된 질문에 대답하려는 시도 일 뿐이다. –