Re: [問題] ARRAY reference
※ 引述《cutecpu (可愛中央處理器)》之銘言:
: 問題一:
: 請問 Perl 有辦法像 C 一樣,可以將一個 pointer 指到 array 的某個
: index 嗎?
: 例:
: C:
: int array[] = {1,2,3,4,5};
: int ptr = array + 2; /*
: 將 ptr 指向 &array[2]
: 所以 ptr[0] = 3
: ptr[1] = 4
: ptr[2] = 5
: */
: Perl:
: @array = (1,2,3,4,5);
: ########################################################
: # 有辦法用什麼 reference 來達到上面 C 的功能嗎?
: # 希望不要用複製陣列的方式 → @arr = @array[2..$#array];
: ########################################################
這個問題要達到你描述的那樣, 最最基本上是不行.
(不過 perl 很靈活, TIMTOWTDI,
所以加工一下還是有方法做到)
reference 和 pointer 的主要差異,
就是 reference 不能作 pointer 的運算,
不可以 reference + 1 來取得所謂的下一項.
所以只提供 reference 而沒有 pointer 的 runtime system
可以提供 garbage collection 的功能.
如果像 pointer 那樣可以隨意加減,
runtime system 無法知道到底有哪一個 address 是真的再也不會用到.
你可以弄一個 $ptr = \$array[2];
但是這樣就只有 ref 到那一格, 而不是一整串;
如果你要做到一整串,
那麼也許可以考慮迂迴一點包成一個物件,
這個物件裡面有一個 array ref, 和一個 begin index,
存取的時候再去計算實際的那一項出來..
你可以考慮 perl tie 的功能,
(參考這邊 http://perldoc.perl.org/perltie.html
和這邊 http://perldoc.perl.org/Tie/Array.html )
你可以做出一個用起來就像正常 array 的東西,
而且不用複製原來的 array.
應該是完全符合你的需求.
(也有可能 CPAN 已經有這種 package 了, 不過我還沒有去找)
: 問題二:
: Perl:
: @array = (1,2,3,4,5);
: @arr = @array[2..$#array];
: $ref = \@arr; # ←這樣寫 ok
: ##############################################
: # 想問的就是上面那行如果改成:
: # $ref = \(@array[2..$#array]);
: # 為什麼這時候的 $ref not an ARRAY reference?
: ##############################################
: 謝謝^_^
因為 @array / @arr 這樣的寫法是 array
而 @array[2..$#array] 是 @array 裡面 2 ~ $#array 這幾個元素排的 list
\@arr 是指向 @arr 的 ref
\(@array[2..$#array]) 是一排分別指向 @array 的 2 ~ $#array 元素的 ref
所以 $ref = \(@array[2..$#array]) 的話, $ref 的值應該是 \$array[$#array]
如果對於什麼時候是 array 什麼時候是 list 有一點困惑..
你可以這樣去記:
array 和 list 是不一樣的東西,
array 可以當 list 用,
list 不能當 array 用.
(但 list 可以指定到一個 array 裡面去)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.242.246.249
推
03/29 17:23, , 1F
03/29 17:23, 1F
※ 編輯: CindyLinz 來自: 210.242.246.249 (03/29 17:44)
推
03/30 01:03, , 2F
03/30 01:03, 2F
推
03/30 12:55, , 3F
03/30 12:55, 3F
推
03/30 18:24, , 4F
03/30 18:24, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Perl 近期熱門文章
PTT數位生活區 即時熱門文章