2012-03-11 2 views
1

안녕 얘들 아! Conway의 삶의 게임을 실행하고 있습니다. 그러나 project.clj 파일에 field.clj (run.clj이 아닌)을 참조하는 https://github.com/sebastianbenz/clojure-game-of-life을 원래 버전으로 수정해야한다고 생각합니다. 이렇게 한 다음 실행하여 게임을 시작할 수 있습니다.clojure의 메인 클래스, leiningan (콘웨이의 인생 게임)

그러나 입력 인수에 대한 설명이없는이 메서드는 충돌합니다.

따라서 제 질문은 : Clojure 구문 관점에서이 양식이 무엇을 나타낼까요?

(defn run-game 
    ([engine seed] 
    (run-game engine seed 
     {:columns 50 :rows 50 :speed 500 :cellsize 10})) 
    ([engine seed options] 
    (let [panel (field-panel engine seed options) 
      frame (field-frame panel) 
      timer (Timer. (options :speed) panel)] 
     (.start timer)))) 

UPDATE _

  • 이유는 "[엔진 씨]"는 괄호 안에 중첩?

  • 이 함수는 왜 재귀 적입니까?

  • 이 기능의 설계 방법에 대한 다른 구문 수준의 통찰력은 무엇입니까?

+0

아하 - 이제 알았습니다 - 이것은 다형 함수입니다 ... 그래서 내가 얼마나 많은 args를 putted에 따라 다른 기능 구현이 트리거됩니다. 이 구문을 사용하여 다형 함수로 여러 함수를 정의 할 수 있다는 것을 알지 못했습니다. – jayunit100

+0

이것은 다형성이 일반적으로 정의되는 것과 관련이 있다고 생각하지 않습니다. 선택적 인수가있는 함수 일뿐입니다. – amalloy

답변

4

는 당신이 요구하는지 100 % 확신하지만, 기본적으로 engineseed 인수 또는 engine, seedoptions 인수를 두 함수를 정의합니다.

option 인수를 지정하지 않으면이 함수는 기본 매핑 {:columns 50 :rows 50 :speed 500 :cellsize 10}을 만들고 두 번째 형식을 호출합니다.

무엇을 engineseed으로 설정해야하는지 코드를 확인해야합니다.

(run-game engine seed) 

또는

(run-game engine seed {:columns 75 :rows 75 :speed 750 :cellsize 15}) 

가 도움을합니까 :

그럼 당신은 그것을 호출 할 수 있습니다?

+0

나는이 논증들이 어떻게 사용되고 있는지 잘 모르겠다. 그래서 이것은별로 도움이되지 않는다 ... :(나는이 프로그램이 2 개의 인자를 가졌다는 것을 알고있다. 그러나 실행중인 게임의 구문을 해석하는 데 문제가있다. is doing ... 함수가 작동하는 방법과 인수를 위임하는 방법에 대한 구체적인 정보 찾기 defn 함수 이름 뒤에 오는 []가없는 이유가 궁금합니다. – jayunit100

+0

내 질문이 정확하지 않다는 것을 분명히하기위한 Upvote. – jayunit100