是否有必要在将可选参数传递给另一个可选参数之前检查它?

Posted

技术标签:

【中文标题】是否有必要在将可选参数传递给另一个可选参数之前检查它?【英文标题】:Is it necessary to check an optional argument before passing it to another optional argument? 【发布时间】:2014-12-09 15:24:43 【问题描述】:

关于可选参数的使用,我有以下问题。假设我在模块m_aaa中定义了以下例程aaa

MODULE m_aaa
SUBROUTINE aaa(a, b)
  INTEGER           :: a
  INTEGER, OPTIONAL :: b
END SUBROUTINE
END MODULE

现在我有了第二个使用模块m_aaa 的例程。是否可以像这样传递可选参数

! Variant 1:
SUBROUTINE bbb(c, d)
  USE m_aaa 
  INTEGER           :: c
  INTEGER, OPTIONAL :: d
  CALL aaa(c,d)
END SUBROUTINE  

或者是否有必要像这样检查可选参数 d 的存在:

! Variant 2:
SUBROUTINE bbb(c, d)
  USE m_aaa 
  INTEGER           :: c
  INTEGER, OPTIONAL :: d
  IF (PRESENT(d)) THEN
    CALL aaa(c,d)
  ELSE
    CALL aaa(c)
  ENDIF
END SUBROUTINE  

感谢您的帮助。

【问题讨论】:

【参考方案1】:

在将可选虚拟参数作为实际参数传递给另一个可选虚拟参数之前,无需检查它是否存在。

12.5.2.12 第 4 段(ISO/IEC 1539-1(2010 年 6 月 7 日草案)又名 Fortran 2008)允许关于不存在的可选实际参数:

除了上面列表中的说明外,它可以作为对应于可选虚拟对象的实际参数提供 参数,然后也被认为不存在。

【讨论】:

以上是关于是否有必要在将可选参数传递给另一个可选参数之前检查它?的主要内容,如果未能解决你的问题,请参考以下文章

定义后无法将可选参数传递给express

如何将可选参数传递给typescript中的回调函数

当我将可选参数传递给视图时,为啥我的 CSS 静态文件在 Django 中不起作用?

如何将可选参数传递给 C++ 中的方法?

将可选参数传递给 ASP.NET API 的 GET 方法

检查内部方法是不是传递了一些可选参数