为派生数据类型的数组定义默认值

Posted

技术标签:

【中文标题】为派生数据类型的数组定义默认值【英文标题】:defining default values for an array of derived data type 【发布时间】:2022-01-17 23:54:43 【问题描述】:

在 fortran 中,您可以在声明时为变量定义一个默认值,该变量可以稍后在代码中被覆盖,还可以为派生类型数组中的所有条目提供默认值,如下所示:

PROGRAM test
TYPE data
  INTEGER :: j=0
  CHARACTER(len=10)::label="hello"
END TYPE data
TYPE(data) :: obj(2)

! overwrite the default of 0 in the first array entry
obj(1)%j=6  ! etc etc

END PROGRAM test

一切都非常简单。但是,用于为派生数据类型的所有数组条目定义一组默认值的语法是什么?我查了一些教程,但没有一个解决这个问题。换句话说,默认情况下j=0obj%j 的第一个元素中,并在第二个元素中设置为1,依此类推...

PROGRAM test

TYPE data
  INTEGER :: j
  CHARACTER(len=10)::label
END TYPE data

TYPE(data) :: obj(2)=??? ! what do I put to define an array of default types?

! for example these might be my desired default values
obj(1)%j=0
obj(1)%label="bad"
obj(2)%j=1
obj(2)%label="good"

END PROGRAM test

【问题讨论】:

【参考方案1】:

首先是关于术语的注释:在这样的陈述中

integer, save :: i=1

这不为i 提供一个“默认”值,它为i 提供一个初始 值。我们称之为显式初始化。 (请注意,我如何将 SAVE 属性放在那里只是为了使其显而易见;该属性是隐式的。)

无论对象是内在类型还是派生类型、标量还是数组,这种显式初始化的语法都是相同的:

type(decl_type), save[, attributes] :: myobj = initial_expression

其中decl_typeintegerrealmy_type 等(type(integer) 当然可以写成简单的integer。)

对于派生类型,我们只需要找到一个合适的初始化表达式。

对于数组myobj,此表达式可以是标量(在这种情况下,数组的所有元素最初都具有该值)或数组。明显情况使用默认结构构造函数:

type(my_type), save               :: myobj1 = decl_type(comps)
type(my_type), save, dimension(2) :: myobj2 = decl_type(comps)
type(my_type), save, dimension(2) :: myobj3 = [decl_type(comps1), decl_type(comps2)]

如果要使用结构构造函数构造数组,注意需要数组构造函数:结构构造函数isn't elemental。

更一般地说,我们可以使用默认结构构造函数以外的东西,但表达式必须是常量表达式

提供一个适合该问题的示例:

implicit none

type data
  integer :: j
  character(10) :: label
end type data

type(data), save, dimension(2) :: mydata=[data(0,"bad"), data(1,"good")]

end

最后,如果派生类型对组件有默认初始化,它们可以从结构构造函数中省略:

implicit none

type data
  integer :: j=-1
  character(10) :: label="nothing"
end type data

type(data), save, dimension(2) :: mydata=data()

end

【讨论】:

美丽的答案。谢谢

以上是关于为派生数据类型的数组定义默认值的主要内容,如果未能解决你的问题,请参考以下文章

打字稿从元组/数组值派生联合类型

定义派生类型数组

数组,定义方法内容整理

数组 Array

Java数组1----数组的定义与使用

Java数组1----数组的定义与使用