1

私は Leiningen と Clojure を使用していますが、名前空間を正しくインポートするだけでなぜ Clojure が非常に難しいのか理解できません。これは次のエラーです

これは私のcore.cljファイルにあるものです:

; namespace macro
(ns animals.core
  (:require animals.animal)
  (:use animals.animal)
  (:import (animals.animal Dog))
  (:import (animals.animal Human))
  (:import (animals.animal Arthropod))
  (:import (animals.animal Insect)))

; make-animals will create a vector of animal objects
(defn make-animals []
  (conj []
        (Dog. "Terrier" "Canis lupis familiaris")
        (Human. "Human" "Homo sapiens")
        (Arthropod. "Brown Recluse" "Loxosceles reclusa")
        (Insect. "Fire Ant" "Solenopsis conjurata")))

; print-animals will print all the animal objects
(defn print-animals [animals]
  (doseq [animal animals]
    (println animal)))

; move-animals will call the move action on each animal
(defn move-animals [animals]
  (doseq [animal animals]
    (animals.animal/move animal)))

; entry to main program
(defn -main [& args]
  (let [animals make-animals]
    (do
      (println "Welcome to Animals!")
      (println "-------------------")
      (print-animals animals))))

次に、REPL で次のように入力します (leinプロジェクトの src/ ディレクトリに):

user> (require 'animals.core)
nil
user> (animals.core/-main)
ClassNotFoundException animals.core  java.net.URLClassLoader$1.run (URLClassLoader.java:202)

わかりました...何?なんで?

animal.clj参考までに、これもanimalsディレクトリにある私のファイルです。

(ns animals.animal)

(defprotocol Animal
  "A simple protocol for animal behaviors."
  (move [this] "Method to move."))

(defrecord Dog [name species]
  Animal
  (move [this] (str "The " (:name this) " walks on all fours.")))

(defrecord Human [name species]
  Animal
  (move [this] (str "The " (:name this) " walks on two legs.")))

(defrecord Arthropod [name species]
  Animal
  (move [this] (str "The " (:name this) " walks on eight legs.")))

(defrecord Insect [name species]
  Animal
  (move [this] (str "The " (:name this) " walks on six legs.")))
4

1 に答える 1