2013年3月14日 星期四

Perl初學筆記(4)-關於Reference(參照)-2

NOTE:
  • Perl一直到Perl5才出現reference(在perl還沒有reference的概念之前,想要產生二維的陣列是挺困難的),當初為了讓perl5能夠擁有OOP(物件導向/面對對象)的概念,需要有reference的幫助,因此他也叫做物件參考指標
  • Reference產生很複雜的資料結構 ,對資料的處理有蠻好的彈性。
  • Reference的種類 :
    • 硬性 :
      存記憶體位置(常見)
    • 軟性(aka symbolic reference象徵性參考指標)  :
      用變數名稱作為替代(少見)
  • 參照的寫法:
    • 一般來講reference的變數可以是純量變數,陣列雜湊
    • 存取一個變數的作為reference只需要在變數前面加 "\" ,
      • ex:
        %my_hash = qw/name Win want_job Frontend age 24/;
        $ref = \%my_hash
    • 取得reference的值
      • 取得reference的值其實就是取得他在記憶體位置中的內容
      • 要取得reference只需要在變數前面加上被參照的資料型態符號,ex:
        • 以純量作為例子,純量的資料型態符號是$,所以若要取得$scalar的 值只需要在$scalars_reference前面再加一個$
          $$scalars_reference = $scalar;
        • 以陣列作為例子,陣列的資料型態符號是@,所以若要取得$myarray的值只需要在$myarray_ref前面加一個@
          @$myarray  = $myarray;
        • 以雜湊為例子就是
          %$my_hash_ref = %my_hash;
        • 另外以上的三個例子:
           $
          $scalars_reference
          @$myarray
          %$my_hash_ref

          也可以這樣寫.....(加個{ }而已xd)
          $$scalars_reference =  ${$scalars_reference}
          @$myarray                 = @{$myarray }
          %$my_hash_ref        =  %{$my_hash_ref}
      • 常數可以被參考嗎? ans : 可以
Example:取得一個array的reference:
my $ref = \@array;

print "將\@array的參照存在\$ref,print結果:\n";

print $ref."\n";
印出 $ref可得到  ARRAY<0x4c70c8>  -->0x4c70c8就是記憶體位置

Example:怎麼解開參照?   以一個陣列為例,解開參照,並使用陣列取得某個索引值:Ans: 用{}號將reference的變數包起來
my @friends = qw/Tree Bri May/;
my $fri_ref = \@friends;
print @{$fri_ref};

#利用陣列取得某個索引值:
print @{$fri_ref}[2];   #會得到May

Example:以Hash為例,解開參照,請以某個Key來取得值:
my %resume = qw/name Win want_job Frontend age 24/;

my $resume_ref = \%resume;

print ${$resume_ref}{name};        #得到win

print ${$resume_ref}{want_job};  #得到Frontend

print ${$resume_ref}{age};           #得到24

#將%resume當作一般的hash使用for印出

for (keys %{$resume_ref}){
    print ${$resume_ref}{$_}."\n";
}

沒有留言:

張貼留言

若你看的文章,時間太久遠的問題就別問了,因為我應該也忘了... XD

Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...