Datomic이 반복할 때 동일한 임시 ID를 두 번 연속 생성하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com//questions/20015996

  •  21-12-2019
  •  | 
  •  

문제

이렇게 하면 두 가지 다른 ID가 생성됩니다. 이는 훌륭합니다.

#db/id[:db.part/user]
#db/id[:db.part/user]

하지만 다음과 같은 경우(지금까지 많은 아이디어를 시도했습니다) 동일한 ID가 두 번 생성되는데 이는 제가 원하는 것이 아닙니다.

(repeatedly 2 (fn [] #db/id[:db.part/user]))
(for [n [1 2]] #db/id[:db.part/user])

모두 다음과 같은 결과를 얻습니다.

(#db/id[:db.part/user -1000774] #db/id[:db.part/user -1000774])

생성된 번호는 각 통화마다 동일합니다.

내가 실제로 원하는 것은 호출이 전혀 숫자를 생성하지 않도록 하여 트랜잭션을 통해 생성된 데이터를 추가할 수 있도록 하는 것입니다.

어떤 아이디어가 있나요?

분명히 말하자면, 문서 "tempid를 호출할 때마다 고유한 임시 ID가 생성됩니다."

[@maxthoursie의 댓글 이후 편집됨 repeat 어쨌든 이런 문제가 생길 것입니다.]

도움이 되었습니까?

해결책

사용

(require '[datomic.api :as d])
(repeatedly 2 #(d/tempid :db.part/user))
;; => (#db/id[:db.part/user -1000118] #db/id[:db.part/user -1000119])

고려해 보세요 #...리더 매크로는 자연스럽게 한 번만 발생하는 표현식을 읽을 때 해당 값이 해결된다는 의미입니다.사용 #...매크로는 문자 그대로의 트랜잭션 데이터(예: 스키마)를 작성할 때만 사용할 수 있습니다.런타임에 tempid를 생성하려면 datomic.api/tempid를 사용하세요.

다른 팁

반복은 id를 한 번 호출하여 얻은 값을 반복하기 때문입니다.

대신 반복해서 사용하세요.

다음에서 예시를 확인하세요. http://clojuredocs.org/clojure_core/clojure.core/repeatedly

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top