我正在嘗試讀取一些Fortran代碼,但無法確定%
(百分比符號)的功能。「%」在Fortran中的含義是什麼?
正是在這樣一行:
x = a%rho * g * (-g*a%sigma + m%gb * m%ca * (1.6 * a%rho+g))
它有什麼作用?
我正在嘗試讀取一些Fortran代碼,但無法確定%
(百分比符號)的功能。「%」在Fortran中的含義是什麼?
正是在這樣一行:
x = a%rho * g * (-g*a%sigma + m%gb * m%ca * (1.6 * a%rho+g))
它有什麼作用?
在Fortran 90中,它們允許您創建類似於C++的結構。它基本上用作點(。)運算符。
從http://www.lahey.com/lookat90.htm:
結構(派生類型)
您可以將使用派生類型的數據。這使用戶能夠將內部類型(包括數組和指針)組合到新類型中,使用百分號作爲分隔符可以訪問各個組件。 (派生類型在VAX Fortran中稱爲記錄。) !使用派生類型和模塊的示例。
module pipedef
type pipe ! Define new type 'pipe', which
real diameter ! is made up of two reals, an
real flowrate ! integer, and a character.
integer length
character(len=10) :: flowtype
end type pipe
end module pipedef
program main
use pipedef ! Associate module pipedef with main.
type(pipe) water1, gas1 ! Declare two variables of type 'pipe'.
water1 = pipe(4.5,44.8,1200,"turbulent") ! Assign value to water1.
gas1%diameter = 14.9 ! Assign value to parts
gas1%flowrate = 91.284 ! of gas1.
gas1%length = 2550
gas1%flowtype = 'laminar'
.
.
.
end program
它是派生類型的部件標識符。看一下這個。 http://www.lahey.com/lookat90.htm
%
作爲一個令牌有許多密切相關的用途。隨着Fortran的發展,這些用途的數量有所增加。
回到Fortran 90,並且在問題中看到的用法%
用於訪問派生類型的組件。考慮派生類型a_t
與該類型的對象a
:
type a_t
real rho, sigma
end type
type(a_t) a
組分rho
和a
sigma
可以與a%rho
和a%sigma
進行訪問。從問題中可以看出,這些組件可能用於表達式(例如a%rho * g
),或者它們可能是作業的左側(a%rho=1.
)。
派生類型的組件本身可以是衍生的類型的對象:
type b_t
type(a_t) a
end type
type(b_t) b
等有可能在一個單一的參考的%
多次出現:
b%a%rho = ...
這裏,派生類型對象a
的組件rho
(它本身是b
的組件)是分配的目標。在一個參考文獻中可以看到相當可怕的%
s,但零件參考文獻總是從左到右分解。
來到2003的Fortran,一個然後看見%
與派生類型在幾個其他方式:
考慮派生類型
type a_t(n)
integer, len :: n=1
real x(n)
contains
procedure f
end type
type(a_t(2)) a
目的a
具有單一長度型參數和類型結合的過程。表達式如下:
x = a%f()
引用派生類型對象的綁定f
。
參數的a
n
可以如
print *, a%n, SIZE(a%x)
多被引用作爲組分x
可以被引用。
最後,從2008年的Fortran,%
可用於訪問複雜對象的實部和虛部:
complex x, y(3)
x%im = 1.
x%re = 0.
y = (2., 1.)
print *, y(2)%im+y(3)%re
抱歉,但如何才能回答描述某物過另一種語言,如果有人不熟悉什麼與C++或點運營商? –
它只是一種訪問模塊內部變量的方法。所以就像在這個例子中,你可以直接修改「object1」中的一個單獨變量,而不必使用整個構造函數_i.e._,而不需要使用所有需要的變量('water1 = pipe(4.5,44.8,1200, 「動盪」)')。 – Garini