使用函数创建结构实例

Posted

技术标签:

【中文标题】使用函数创建结构实例【英文标题】:Create an instance of struct using a function 【发布时间】:2021-10-11 13:32:58 【问题描述】:

我需要使用函数创建实例,但使用以下代码时出现错误:

#lang racket

(struct Mdb(aname bname cname)#:mutable)
(define ainst(Mdb "aval" "bval" "cval"))

(define ff(λ (newname)
            (define newname(Mdb "xval" "xbval" "cbval"))))

开始(可能是隐式的):在一系列内部定义之后没有表达式:(begin (define newname (Mdx "" "" ""))) (定义新名称(Mdx“”“”“”))

【问题讨论】:

你不能使用函数参数作为define的变量名,它不起作用。您将不得不重新考虑使用 newname 想要完成的任务。 【参考方案1】:

真正想做什么?定义一个创建结构实例的函数? newname 参数应该做什么?仅供参考,这不是有效的语法,也没有意义:

(define ff
  (λ (newname) ; what's the idea of this parameter?
    ; you need to return something after a `define`
    ; or else you'll get that "no expression after
    ; a sequence of internal definitions" error
    (define newname (Mdb "xval" "xbval" "cbval"))))

如果你想用一个程序来搞定它,你可以试试这个:

(define ff
  (λ () (Mdb "xval" "xbval" "cbval")))

(define newname (ff))

但这只是一种人为的表达方式:

(define newname (Mdb "xval" "xbval" "cbval"))

声明:你不能使用函数参数作为define的变量名,这是不允许的,这不是变量定义在Scheme中的工作方式。

【讨论】:

以上是关于使用函数创建结构实例的主要内容,如果未能解决你的问题,请参考以下文章

2017-5-27引用类型之Object类型

在 C 中是不是有一个函数可以用作“实例方法”?

Go语言基础:结构体

Go语言基础:结构体

C# 构造函数总结

如何使用组件范围实例层次结构从 C++ 创建 QML 组件