【问题标题】:Fortran syntax for assignments赋值的 Fortran 语法
【发布时间】:2018-06-13 14:32:13
【问题描述】:

Fortran 语法快把我逼疯了!谁能解释我如何调用该作业(我很确定这也不是正确的术语......)。我正在尝试根据值类型分配类型。我有以下内容:

模块测试模块 隐式无 类型 :: 我的类型 整数 :: 我 真实的::r 逻辑 :: l 包含 通用 :: assignment(=) => mytype_to_type 过程,通过(我)::mytype_to_type 结束类型 mytype 包含 子程序 mytype_to_type(t, me) 隐式无 类(*),意图(输入)::t 类(mytype),意图(in)::我 !.. 基于输入类型的处理 选择类型 (t) 类型是(整数) t = 我%i 类型是(真实的) t = 我%r 类型是(逻辑) t = 我%l 类默认值 停止“无” 返回 结束选择 结束子程序 mytype_to_type 结束模块 test_module 程序测试 使用 test_module 隐式无 类型(我的类型)::t_type 整数 :: i = 1 实数 :: r = 1。 逻辑 :: l = .true。 t_type = 我!!这应该如何工作? 选择类型(t_type) 类型是(整数) 写(*,*)“是整数” 类型是(真实的) 写(*,*)“是真实的” 类型是(逻辑) 写(*,*)“是合乎逻辑的” 类默认值 返回 结束选择 结束程序测试

这还能用吗?谁能帮我解决这个问题?

谢谢!

【问题讨论】:

  • 您是否收到编译器错误?分享吧!
  • 您没有从整数到 my_type 的任何定义分配。仅从 my_type 到 class(*)。
  • 感谢您的回答!不太明白,不好意思!也许我应该澄清一下我想要做什么:我想根据输入类型返回一个类型。

标签: syntax fortran variable-assignment


【解决方案1】:

在支持定义赋值的子例程中,两个参数是这样的,第一个对应赋值语句的左侧,第二个对应右侧。1

在这里,您提供的子例程是将my_type 表达式分配给无限多态对象。这不是您想要的,在左侧看到 t_type

相反,您应该为my_type 对象提供定义分配

subroutine stuff_to_mytype(me,t)
  class(mytype), intent(out) :: me
  class(*), intent(in) :: t

  !.. process based on input type
  select type (t)
     type is (integer)
        me%i = t
     type is (real)
        me%r = t
     type is (logical)
        me%l = t
     class default
        stop "none"
        return
  end select

end subroutine stuff_to_mytype

也就是说,您可以为您支持的每种类型使用特定的子例程,而不是使用通用分辨率的无限多态右侧。在这种情况下,您还可以考虑泛型结构构造函数 (t_type=mytype(i))。


1 准确地说,第二个参数是括号中的右侧。

【讨论】:

    猜你喜欢
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多