2017-06-25 14 views
3

ラケット・スキームには、「文字列ポート」というデータ構造があり、そこからデータを読み取ることができます。 perl6に似たものは何ですか?perl6データを読み取るためのRacket Schemeに類似した任意の文字列ポート?

my $a = "(1,2,3,4,5)"; # if you read from $a, you get a list that you can use; 
my $aList=readStringPort($a); 
say $aList.WHAT; # (List) 
say $aList.elems; # 5 elements 

my $b = "[1,2,3]"; # you get an array to use if you read from it; 

my $c = "sub ($one) {say $one;}"; 
$c("Big Bang"); # says Big Bang 

関数EVALはかなりの作業の完全なスペクトルをしていないされています:

> EVAL "1,2,3" 
(1 2 3) 
> my $a = EVAL "1,2,3" 
(1 2 3) 
> $a.WHAT 
(List) 
> my $b = EVAL "sub ($one) {say $one;}"; 
===SORRY!=== Error while compiling: 
Variable '$one' is not declared. Did you mean '&one'? 
------> my $b = EVAL "sub (⏏$one) {say $one;}"; 

おかげでたくさんの例については、私はこれらの成果を達成したいです!

lisprog

+0

my $b = EVAL "sub (\$one) \{say \$one;}"; 

...またはリテラル非補間文字列を使用して...のいずれか、文字列リテラルで、そのようなものを表すバックスラッシュでそれらをエスケープするために!分かりました。ありがとう! – lisprogtor

答えて

5

EVALはこれを行います。

あなたの最後の例では、問題は、$変数と{ブロックと同様のを補間その二重引用符で囲まれた文字列です。私が見

my $b = EVAL 'sub ($one) {say $one;}'; 
my $b = EVAL Q[sub ($one) {say $one;}]; 
関連する問題