如何用一种方法指向两种不同的方法?

How to point with one method to two different methods?

我打算用相同的过程指向两个不同的过程,但我没有使用 Fortran 的编程经验,所以我需要帮助。 这是我的简单代码:

module types

  type :: type_one
    integer, private :: a1,a2
   contains
    procedure, public :: f_data => set_data_a1
    procedure, public :: f_data => cal_data_a2
  end type type_one

  private :: set_data_a1,cal_data_a2 

contains

integer function set_data_a1(this)
  class(type_one) :: this
  this%a1 = 2
end function set_data_a1

integer function calc_data_a2(this)
  class(type_one) :: this
  this%a2 = this%a1 + 3
end function calc_data_a2

end module types

program types_pro
  implicit none
  type(type_one) :: type_obj
  type_obj%f_data()
end program types_pro 

我收到这个错误: `对于派生类型 'type_one' |

已经有绑定名称为 'f_data' 的过程

是否可以使用 type_obj%f_data() 同时调用两个过程?

通用名称,例如您的 f_data,允许使用相同的名称调用具有不同输入签名(级别、类型、种类和参数数量)的过程。但是,因为它们具有相同的参数签名,所以当您的代码调用 f_data.

时,编译器无法确定要执行 calc_data_a1calc_data_a2 中的哪一个

这让我问你一个问题:你期望编译器或代码的行为如何?您希望编译器做什么?(好的,这是两个问题。)

作为一般规则,如果您希望编译器执行两个过程,您必须进行两次调用。我想,如果您希望在调用一个过程时都运行,则可以让一个过程调用另一个过程。

如果您想将多个函数包装在同一个名称后面,它们必须具有不同的输入签名,以便编译器可以确定调用哪一个。

显然我早期版本的回答不够明确:

不,没有办法编写代码来执行两个不同的过程以响应对其中一个的单个调用。 (除非,也就是说,一个调用另一个。)此外,期望单个(过程)指针在任何时候指向多个目标是不合理的。