如何在Fortran模块中的函数中使用可选参数?

时间:2019-04-26 20:13:15

标签: fortran

我在Fortran模块中有一个函数,带有两个必需参数和一个可选参数。如果不存在可选参数,我想在函数中为其设置默认值。

使用该函数时,出现分段错误:Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

回溯是指

的第一行
if (.not. present(optionalArg)) then
    optionalArg = 2
end if

并定义了功能

function func(reqArg1, reqArg2, optionalArg)
    real(kind=real64), intent(in) :: reqArg1
    integer, intent(in) :: reqArg2
    integer, optional :: optionalArg
    real(kind=real64), dimension(reqArg2) :: func
    ...

这是定义带有可选参数的函数的正确方法吗?我尝试在调用另一个函数的模块和定义该函数的模块中都为该函数编写一个显式接口,但是两者都会给我带来错误。如果将接口放在调用函数的模块中,则会得到Error: Cannot change attributes of USE-associated symbol func,因为该模块已经包含在USE语句中;如果将接口放在函数的模块中,则会出现关于当编译器在CONTAINS块内到达实际函数定义时,已经定义了该函数。

1 个答案:

答案 0 :(得分:1)

此代码显然无效

---
- hosts: localhost
  gather_facts: false
  vars:
    rows:
    - alpha
    - beta
    - gamma
    cols:
    - one
    - two
    - three

  tasks:
  - name: Loop include tasks
    include_tasks: test2.yml
    with_items:
    - "{{ rows }}"
    loop_control:
      loop_var: rowsval

您无法访问不存在的可选参数的值。您无法阅读,也无法设置,必须使用其他局部变量,我敢肯定,这里有其他问答示例。

---
- name: Start task
  debug:
    msg: "Start iteration"

- name: Loop task
  debug:
    msg: "processing now: {{ rowsval }} with: {{ item }}"
  with_items:
  - "{{ cols }}"