|
Hi, li913
看到你 Allocation: Fortran 2003 Enhancements 的"SOURCE"語法
ALLOCATE( na, SOURCE=PACK(ma,ma/=0) )
巧妙的避開assignment之前, 要先allocate的困擾
ALLOCATE( na(?) ) ! unknown size
na = PACK(ma,ma/=0)
F2003也支援"Automatic Reallocation"的語法
(F95, for omponents only, deep copy的extension)
i.e., 之前的 "ALLOCATE( na(?) )"都可免了
INTEGER, ALLOCATABLE :: a(:)
a = [(i,i=1,10)] ! ALLOCATE(a(10)) automatically
a = [(i,i=1,100)] ! deallocate-and-then-reallocate automatically
------------------------------------
跟你請教一下:
我是挺杞人憂天的, 這樣flixible的背後會隱藏多少"人"的logical errors
same shape (rank及extent都要相同), 方可進行array assignment, 安全性很高
如今, 對於allocatable array做assignment, extent不同就自動deallocate/reallocate
這有極大的機會非程式員的本意
程式員很可能只是不小心把"extent"coding錯了, 沒有要reallocate的意思
這樣的誤會, 是不容易檢查出來的, 你會這麼擔心嗎? |
|