2024 Clojure 状态调查!中分享您的想法。

欢迎!请参阅关于页面以了解更多关于这个网站如何运作的信息。

+1
Clojure

可能很微不足道,但我刚接触 Clojure 并没能解决这个问题。

为什么它不能评估并引发错误?
clojure.lang.ExceptionInfo: 无法解析符号: defstruct

(ns StructMaps)

(defn Pets
  []
  (defstruct pets :PetType :PetName)
  (def myPet (struct pets "dog" "Fido"))
  (println myPets)
  )

(Pets)

感谢有帮助的回答!

我很想知道为什么人们还在使用 defstruct,而 defrecord 更好用?我很好奇是什么原因让你选择了这个选项。
我可以猜测:提问者遵循了以下教程:TutorialsPoint Clojure 教程:https://www.tutorialspoint.com/clojure/clojure_struct.htm 或 Udemy Clojure:2023 完全新手指南 https://www.udemy.com/course/clojureprogramming/ ... 这两个都极其糟糕。
可能还值得一提

驼峰命名法并不适合 Clojure 绑定,所以我们会有 (ns struct-maps),(defn pets ..),(def my-pet ..),以此类推。我们在类似 "类型" 名称或在底层生成 Java 类的场合使用驼峰命名法。

定义(以及其他的定义*)创建顶层定义,这样我们就不会在函数内部使用它们。如果你正在遵循这样一个教程,那么这是一个糟糕的教程,你应该停止跟随它,寻找更好的东西。

如其他人所指出的,结构体已经被弃用很长时间了,即使录音带作为一种现代替代品存在,我们通常还是使用普通的旧散列表——这是从静态类型OOP语言转过来需要习惯的东西:Clojure大部分时间都是关于普通数据的。

1 答案

0
by

我在运行clj -M StructMaps.clj时不能重现这个问题,除了有一个拼写错误:可能应该是myPokemons而不是myPet

...