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教程或Udemy Clojure:2023年入门指南。两者都很差。
也许也值得一提

驼峰命名法对于Clojure绑定来说并不地道,所以我们使用(ns struct-maps),(defn pets ...),(def my-pet ...)等方式。我们在类似“类型”命名的或其他在底层生成Java类的情况下使用驼峰命名法。

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

正如其他人指出的,结构体很长时间以前就已经被弃用了,尽管存在作为现代替代品的记录(records),但我们一般使用普通的哈希映射(hash maps)-- 这是从静态类型面向对象语言转换过来必须习惯的东西:Clojure大部分时间都在处理普通的数据。

1 个答案

0 评分
by

我无法复制这个问题,当使用clj -M StructMaps.clj运行,除了有一个拼写错误:可能应该是myPets而不是myPet

...