2011-02-17 6 views
0

스칼라에서는 문자열을 작성하여 클래스 또는 메소드 선언의 코드를 가져 와서 실행 한 후 새 객체를 작성할 수 있습니까? 여기 새로운 객체를 생성하기위한 스칼라 문자열의 템플릿 패턴

루비 코드의 예는 다음과 같습니다

"class #{name}; def #{method_name}; \"#{block.call}\"; end; end" 

당신이 내 방식에 대한 예 또는 링크를 알고 계십니까?

도움 주셔서 감사합니다.

+2

가능하면 정적 형식 검사 (새로 작성된 코드와 기존 코드 사이)의 가능성을 없애 버립니다. 따라서, 첫 번째 본능은 아마도 "하지 말아야한다". 실제로 필요한 경우 컴파일러를 호출 할 수 있습니다. –

+0

아마도 기본 문제를 추상화하여 해결할 수 있습니다. – pedrofurla

+0

@pedrofurla, 그 의견은 아마 모든 질문에 추가 될 수 있습니다. :) –

답변

4

확실히, 당신은 주어진 문자열로 컴파일러를 호출하여 어떻게 든이 작업을 수행 할 수 있습니다. 그러면 사용자 정의 클래스 로더가 필요할 것입니다. 그러나 스칼라는 정적 언어이므로 루비 또는 다른 동적 언어 에서처럼 편리하고 우아하지 않습니다.

[편집]

나는 그것을 시도하지,하지만이 링크를 발견 http://scala-programming-language.1934581.n4.nabble.com/Compiling-a-Scala-Snippet-at-run-time-td2000704.html

+0

안녕 랜디, 빠른 응답을 주셔서 감사합니다. 작은 코드 예제를 어떻게 사용할 수 있습니까? –

+0

Ruby에서 스칼라가 우아 할 수없는 예제를 제공하기를 거부합니다. 특정 언어 기능을 복제하는 것이 아니라 전체 사용자 스토리의 순서로 복제합니다. –

+0

물론 두 언어의 전반적인 우아함은 거의 같은 수준입니다. 나는 "그런 종류의 해커"에 대해 암시했다. 나는 그것을 쓰기 위해 정중하게 생각했다 :-) – Landei

0

내가 높은 수준의 문제는 해결하려는 모르겠어요,하지만 내가 스칼라 REPL 수행해야합니다 상상 대화식으로 코드 행을 입력 할 때는 항상이 작업을 수행하십시오. 필자는 개발자가 코드를 동적으로 생성해야하는 응용 프로그램과이를 성공적으로 통합했음을 상기합니다.

그러나 Rex가 지적했듯이 근본적인 문제에 대한 해결책은 이와 같은 부주의하고 안전하지 않은 메커니즘을 사용하는 것보다 낫습니다.

1

디자인 패턴은 일반적인 해결책으로 일반적인 문제를 피하기 위해 만들어졌습니다. 여기에서는 외국 디자인 패턴을 사용하여 단어 단위로 번역하려고합니다. 특히 동적 언어 패턴에주의하십시오.

특히 자바의 템플릿 패턴은 일반적으로 abstract class es라는 언어 구문입니다. 스칼라에서는 abstract classtrait을 만들 수도 있습니다.

또 다른 트랩 인 싱글 톤 디자인 패턴은 스칼라의 언어 구성입니다.

관련 문제