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已经存在了?我很想了解是什么促使你做出这个选择的。
我将猜测:OP 教程可能来自TutorialsPoint的Clojure教程: https://www.tutorialspoint.com/clojure/clojure_struct.htm 或者 Udemy Clojure:The Complete Beginner's Guide 2023 https://www.udemy.com/course/clojureprogramming/ ... 两者都极差。
可能还值得提一下

驼峰命名法对于Clojure绑定来说并不合适,所以我们使用(ns struct-maps),(defn pets ..),(def my-pet ..)等。我们确实会使用驼峰命名法来表示“类型”名称或在底层生成Java类。

def和其他def*事物创建顶层定义,所以我们不会在函数中使用它们。如果你跟的是一个这样做教程的,那么这是一个糟糕的教程,你应该停止跟随它,并寻找更好的内容。

正如其他人所指出,结构体已经弃用很长时间了,尽管存在作为现代替代品的记录,我们通常还是使用普通的哈希表——这是来自静态类型面向对象语言的你需要习惯的事情:Clojure大部分时间都是关于原始数据的。

1 答案

0

我无法重现这个问题,运行clj -M StructMaps.clj时除了有一个拼写错误:应该是myPet而不仅仅是myPets

...