You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran中能否修改Type-bound Procedures的可访问性并在指定程序内设为私有?

现有代码片段

MODULE MyTypeMod

TYPE MyType
PRIVATE
INTEGER, ALLOCATABLE :: Num
CONTAINS
  PROCEDURE, PUBLIC :: IsNum!To check Allocation of Num
  ...
END TYPE MyType

CONTAINS
...
END MODULE MyTypeMod
PROGRAM testMyType
USE MyTypeMod, ONLY : MyType

...
END PROGRAM testMyType

问题解答

1. 是否可以修改类型绑定过程IsNum的可访问性状态?

  • 类型绑定过程的可访问性属性仅能在定义该类型的模块(也就是此处的MyTypeMod)内部修改,模块外部没有修改权限。
  • 你当前代码中在MyType类型定义内已经给IsNum指定了PUBLIC属性,如果要调整它的可访问性,只需回到MyTypeMod模块内,将PROCEDURE, PUBLIC :: IsNum修改为PROCEDURE, PRIVATE :: IsNum即可,修改后所有引用该模块的代码都无法直接访问IsNum过程。

2. 是否可以仅在testMyType程序中将IsNum过程设置为PRIVATE?

  • 不可以,核心原因有两点:
    • Fortran中的PRIVATE/PUBLIC访问性控制语句仅能在模块、子模块的声明作用域内使用,主程序testMyType的作用域不支持通过访问性声明修改导入实体的权限。
    • IsNum是MyType的公有绑定过程,它的访问性是由模块中类型的定义决定的固有属性,不会随引用位置的不同而改变。哪怕你在USE语句中只导入MyType,只要你在主程序中创建了MyType的实例,就可以调用该实例的公有IsNum过程,无法在主程序中单独屏蔽这个过程的访问权限。

内容的提问来源于stack exchange,提问作者Akhil Akkapelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:48:03