[SCALA] 스칼라의 동적 유형의 실제 사용
SCALA스칼라의 동적 유형의 실제 사용
JVM이 동적 언어와의 통합 외에도, 스칼라와 같은 정적으로 입력 된 언어의 동적 유형의 다른 강력한 용도는 무엇입니까?
해결법
-
==============================
1.나는 동적 유형이 몇 가지 기능이 JRuby를, 그루비 또는 동적 메타 프로그래밍 및 method_missing 같은 다른 동적 JVM 언어에서 발견 구현하는 데 사용할 수있을 것 같아요.
나는 동적 유형이 몇 가지 기능이 JRuby를, 그루비 또는 동적 메타 프로그래밍 및 method_missing 같은 다른 동적 JVM 언어에서 발견 구현하는 데 사용할 수있을 것 같아요.
매개 변수와 메소드 이름이 백그라운드에서 SQL 쿼리로 번역되는 레일에서 액티브 레코드, 유사한 동적 쿼리를 작성하는 예를 들어. 이것은 루비의 method_missing 기능을 사용하고 있습니다. 이런 식으로 뭔가 (이론 -이 같은 것을 구현하는 시도하지 않은) :
class Person(val id: Int) extends Dynamic { def _select_(name: String) = { val sql = "select " + name + " from Person where id = " id; // run sql and return result } def _invoke_(name: String)(args: Any*) = { val Pattern = "(findBy[a-zA-Z])".r val sql = name match { case Pattern(col) => "select * from Person where " + col + "='" args(0) + "'" case ... } // run sql and return result } }
당신이 그들을 명시 적으로 Person 클래스에 정의하지 않고 방법 '이름'과 '경우 FindByName'를 호출 할 수있는이 같은 사용을 허용 :
val person = new Person(1) // select name from Person where id = 1 val name = person.name // select * from Person where name = 'Bob' val person2 = person.findByName("Bob")
동적 메타 프로그래밍 추가 할이라면, 동적 타입은 런타임 동안 추가 된 메소드를 호출하도록 요구 될 것이다 ..
-
==============================
2.Odersky 동적 언어와의 통합을 주요 동기 였다고 : http://groups.google.com/group/scala-language/msg/884e7f9a5351c549
Odersky 동적 언어와의 통합을 주요 동기 였다고 : http://groups.google.com/group/scala-language/msg/884e7f9a5351c549
[편집] 마틴은 더 여기를 확인
-
==============================
3.또한지도 문법 설탕을 위해 그것을 사용할 수 있습니다 :
또한지도 문법 설탕을 위해 그것을 사용할 수 있습니다 :
class DynamicMap[K, V] extends Dynamic { val self = scala.collection.mutable.Map[K, V]() def _select_(key: String) = self.apply(key) def _invoke_(key: String)(value: Any*) = if (value.nonEmpty) self.update(key, value(0).asInstanceOf[V]) else throw new IllegalArgumentException } val map = new DynamicMap[String, String]() map.foo("bar") // adds key "foo" with value "bar" map.foo // returns "bar"
솔직히 말해서 것은 이것은 단지 당신의 키 입력을 몇 저장 :
val map = new Map[String, String]() map("foo") = "bar" map("foo")
from https://stackoverflow.com/questions/4709183/practical-uses-of-a-dynamic-type-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라는 미래의 순서를 기다리고 (0) | 2019.11.26 |
---|---|
[SCALA] 스칼라의 방법 목록을 얻는 방법 (0) | 2019.11.26 |
[SCALA] 스칼라 소스 코드 변환에 자바를 자동화? [닫은] (0) | 2019.11.26 |
[SCALA] 무엇 컬렉션에 대한 전망은 때 당신이 그들을 사용할까요? (0) | 2019.11.26 |
[SCALA] 어떻게 체인 여러 가지에는 InputStream 하나의 InputStream에 (0) | 2019.11.26 |