개요 : 그래서 (그러나 어쩌면 DSL이 더 나은 것?)처럼루비 : 파일에서 객체를 생성
main.rb
items/
one.rb
two.rb
three.rb
가 items/
의 모든 파일 (직렬화가 발생한 경우) 인간이 읽을 수있는 설명이 있어야합니다
class One < BaseItem
name "Item one"
def meth
"something"
end
main.rb
은 items/
디렉토리의 모든 개체를 인스턴스화 할 수 있어야합니다. 이것이 어떻게 성취 될 수 있습니까? 루비에 익숙하지 않지만 객체 모델이 멋진 클래스 (클래스 훅 등)를 허용한다는 것을 알았지 만이를 해결하는 방법을 찾는 데 어려움을 겪고 있습니다.
모든 입력 방법이 좋습니다.
편집 :
이촬영, 나는 그것의 요점을 놓친 - 동적 것이다 items/
디렉토리에있는 물건이었다 내가 무엇을 언급하지 않았다 - 플러그인과 같은 항목을 취급, 나는 자동 감지하는 main.rb
을 싶어 런타임시 해당 dir의 모든 것 (실행 중에 다시로드 할 수 있음). main.rb
에는 거기에있는 객체에 대한 사전 지식이 없으므로 객체에서 기대할 수있는 방법을 알고 있습니다.
나는 (main.rb
에서) 블록을 취하는 spawn
함수를 정의하는 것을 고려하여 DSL을 만들려고했다. 기본 형식의 새로운 객체를 생성하고 instance_eval
에 블록을 전달할 것
spawn do
name "Item name"
def foo
"!"
end
end
그리고 spawn
의 내장 : items/
에서 샘플 파일과 같을 것입니다. 즉, 값을 설정하려면 name
메서드가 있어야하지만 부수적으로 값을 name
아래에서 액세스 할 수 있기를 바랬 기 때문에 attr의 이름을 변경해야했습니다.
또한 상속 경로를 시도했습니다. 모든 항목 파일에 BaseItem
에서 상속하는 클래스가 포함되어 있고 inherited
을 통해 연결됩니다.하지만 작동하지 않았습니다. 후크가 실행되지 않았으므로 지금 코드를 잃어 버렸습니다.)
EDIT2 :
당신은, 즉 내가 원하는 것 무엇에 가까운 무엇 homebrew이 수식 수행 볼 수 있었다 - 난 그냥 수식을 처리하는 방법을 리버스 엔지니어링 할 수있는 루비 솜씨를 가지고 있지 않았다.
당신은이 문제를 해결하는 연구가 무엇을 이끌 었는지, 그리고 왜 그러한 것들이 당신을 위해 실패했는지 말하지 않습니다. 우리에게 말해주세요, 그래서 우리는 20 개의 질문을 끝내지 못합니다. –