Fortran 中不提升数组的标量参数

2024-01-03

为什么 Fortran 会将标量表达式提升为数组表达,但不作为过程的参数?特别是,为什么标准机构做出这样的设计决定?仅仅是因为含糊不清,程序就应该超载吗?在这种情况下,错误消息是否可以作为替代方法?

例如,在下面的代码中,最后一条语句,x = foo(7),产生 GFortran 错误:Error: Rank mismatch in argument 'a' at (1) (1 and 0).

module m

  public :: foo

  contains

  function foo(a) result(b)
    integer, dimension(:)       :: a
    integer, dimension(size(a)) :: b
    b = a+1
  end function foo

end module m

program p

  use m

  integer, dimension(4) :: x
  integer, parameter, dimension(4) :: y = (/1,2,3,4/)

  x = 7
  x = foo(x)
  x = foo(y)
  x = foo(x + 7)
  x = foo(7)

end program p

这个问题应该问为什么数组赋值会将标量值源提升为数组目标;与数组函数不同。我希望这只是一个方便的特殊情况。如有任何意见,请在下面的乞讨帽中感激不尽。


如果您希望函数处理缩放器和数组参数,请将其声明为“元素”并使用缩放器虚拟参数。然后它将能够处理缩放器和数组实际参数,包括缩放器表达式。这能满足您的需求吗?

改变:

  elemental function foo(a) result(b)
    integer, intent (in)      :: a
    integer :: b
    b = a+1
  end function foo

也许他们提供了一种方法来实现您想要的功能,并且一种方法就足够了?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fortran 中不提升数组的标量参数 的相关文章

随机推荐

  • Junit 断言双数组

    我如何断言两个数组doubles 包含相同的元素 有一些方法可以断言整数数组和其他基本类型包含相同的元素 但不适用于doubles JUnit 4 12 有 实际上它已经是 4 6 的一部分 这是 github 上可用的最旧版本 org j
  • 如何查明特定设备是否支持 SIM 硬件?

    我想根据 SIM 硬件是否存在来禁用我的应用程序中与 CALL 和 SMS 相关的功能 现在 初学者的方法是使用以下命令检查电话类型 if telephonyManager1 getPhoneType TelephonyManager PH
  • 使用带有 fields_for 的数组

    如何使用 fields for 迭代对象数组 全部相同模型 该数组包含由 current user 创建的对象 我目前有 p class fields p
  • 如何解决错误:在此服务器上找不到请求的地址 - CakePHP

    我在我的项目中使用 CakePHP 2 X 但陷入了困境 首先让你知道我使用表单实现了搜索功能POST方法 但为此我发现分页错误 过滤器将不支持下一页 所以我将表单方法更改为GET 现在工作正常 不完全是我所需要的 所有请求的数据都显示在
  • 将非拥有窗口始终设置在顶部 - 就像应用程序“Afloat”

    我设置了一个全局热键RegisterEventHotkey 当用户按下它时 它会获取当前聚焦的窗口CGWindowListCopyWindowInfo 然后我需要将它始终设置在顶部 如果当前窗口在我的进程中 我正在从中执行代码 我可以简单地
  • React 和 Material UI:如何只扩展一张卡

    我使用 React 和 Material UI 来显示一些映射的卡片 当我尝试扩展一张卡时 所有卡都会同时扩展 我发现我必须在 handleExpandClick 函数中传递一个索引 但仍然不起作用 也许我犯了某种错字 我发现这个问题单击展
  • 后台进程的 cy.exec 超时

    我正在尝试使用启动服务器cy exec并像这样后台处理 cy exec nohup python m my module arg 1 failOnNonZeroExit false then result gt if result code
  • 如何防止密码和其他敏感信息出现在 ASP.NET 转储中?

    如何防止在 IIS ASP NET 转储文件中向 ASP NET 网页提交和接收密码和其他敏感数据 重现步骤 使用 Visual Studio 2010 创建 ASP NET MVC 3 Intranet 应用程序 将其配置为使用 IIS
  • Spring嵌套事务

    在我的 Spring Boot 项目中 我实现了以下服务方法 Transactional public boolean validateBoard Board board boolean result false if inProgress
  • 更新更改 svn 时出错

    我安装了 PHPStorm 并使用 SVN 打开包含 PHP 项目的目录 在 更改 的 SVN 选项卡下 我遇到以下错误 Error updating changes svn E155021 The client is too old to
  • Spring JPA Repository - 在服务器重启时保留数据

    我目前正在尝试学习如何使用 Spring Boot 但遇到一个问题 我不确定如何解决 我已经按照使用 JPA 访问数据 http spring io guides gs accessing data jpa 指导 一切正常 但是 如果我重新
  • Pandas 和 Matplotlib - fill_ Between() 与 datetime64

    有一个 Pandas 数据框
  • ggplot 中的热图,每组不同的颜色

    我正在尝试在 ggplot 中生成热图 我希望每个组都有不同的颜色渐变 但不知道该怎么做 我当前的代码如下所示 dummy data data lt data frame group sample c Direct Patient Care
  • OL3:强制重绘图层

    我目前正在将 OpenLayers 客户端版本 2 13 1 升级为新版本的 OpenLayers OL3 我的设置包括作为 WMS 映射服务器的 Mapserver 和前面提到的 OpenLayers 客户端 在旧系统中 我支持用户交互
  • R 中百分比格式表

    我想获取一个百分比表 将值格式化为百分比并以良好的格式显示它们 如果重要的话 我正在使用 RStudio 并编织为 PDF 我看过其他关于此的帖子 但它们看起来都不干净 而且效果不佳 例如 下面的 apply 语句确实采用百分比格式 但是
  • 检索两个字符之间的子字符串

    我有这样的字符串 var str it itA itB et etA etB etC etD 如何检索 和 之间的元素 截至目前 我正在用新行分割文本 但无法解决这个问题 请帮我解决这个问题 请使用这个小提琴http jsfiddle ne
  • IronPython - JSON 选择

    在 IronPython 2 0 1 中处理 JSON 的最佳方法是什么 原生 Python 标准库 json 看起来尚未实现 如果我想使用 Newtonsoft Json NET 库 我该怎么做 我可以将程序集添加到 GAC 但我还有其他
  • 如何使用 php 渲染远程图像?

    这是一个 jpg https i stack imgur com PIFN0 jpg 假设我希望这个渲染自 img php file name PIFN0 jpg 以下是我尝试完成这项工作的方法 样本 php p Here s my ima
  • UICollectionView 启用取消选择单元格,同时禁用 allowedMultipleSelection

    When collectionView allowsMultipleSelection YES 我可以取消选择已选择的单元格 when collectionView allowsMultipleSelection NO 我无法取消选择已选择
  • Fortran 中不提升数组的标量参数

    为什么 Fortran 会将标量表达式提升为数组表达 但不作为过程的参数 特别是 为什么标准机构做出这样的设计决定 仅仅是因为含糊不清 程序就应该超载吗 在这种情况下 错误消息是否可以作为替代方法 例如 在下面的代码中 最后一条语句 x f