2011-02-17 6 views
1
#!perl6 
use v6; 

my $list = 'a' .. 'f'; 

sub my_function($list) { 
    for ^$list.elems -> $e { 
     $list[$e].say; 
    } 
} 

my_function($list); 

먼저 나는 perl5의 스타일이 시도했지만 작동하지 않았다perl6/rakudo : 역 참조 - 질문

for @$list -> $e { 
    $e.say; 
} 
# Non-declarative sigil is missing its name at line ..., near "@$list -> " 

가 어떻게 perl6이 작업을 수행 할 수 있습니까?

+0

정확히 무엇을 원하니? 첫번째 코드 블록의 코드는 적어도 Rakudo HEAD에서 잘 작동합니다. – arnsholt

+0

첫 번째 블록은 두 번째 블록에서 내가 원하는 것에 대한 설명이어야합니다. –

+0

@ sid_com의 perl5 스타일'for $ $ list -> $ e {$ e.say; }'구문은 괜찮습니다. Rakudo는 그 당시에 그것을 구현하지 않았습니다. – raiph

답변

6

당신은 그냥 for $list

를 사용하는 펄 6.이 같은 변수를 역 참조하지 않습니다하지만 그 proably 당신이 원하는 일을 할 수 없습니다. 'a'..'f'은 Perl 6에서 목록을 구성하지 않고 Range이라는 내장 데이터 형식을 구성합니다. say $list.WHAT으로 확인할 수 있습니다. 목록으로 전원을 켜고 각 요소를 반복하려면 for $list.list

3

가이 일을해야 사용하십시오 : $list 이후

.say for @($list); 
.say for $list.list; 
.say for $list.flat; 

는 스칼라, for $list는 단일 항목을 반복합니다.

2

이제 Rakudo 2015.02가 정상적으로 작동합니다.

@을 변수 이름의 twigil로 사용하는 것이 좋습니다.

Perl 6은 상황에 맞는 언어이므로 배열이 'true array'로 작동하려면 적절한 이름을 지정하는 것이 좋습니다.

#!perl6 
use v6; 

my @list = 'a' .. 'f'; 

for @list -> $e { $e.say };