Scala код като данни

Възможен дубликат:
eval в Scala

Д-р Субраманиам в своята презентация http://www.youtube.com/watch?v=LH75sJAR0hc на мин. 30, когато започва да говори за функционален стил в Scala, той дава този пример

class Car {
  def turn(direction: String) = {
    println("turning " + direction)
  }
}

val car = new car
car turn "left"

и след това той казва, че последният ред може да бъде прочетен от файл с данни и оценен. И така, данните стават код, кодът става данни.

Как Scala поддържа това? Има ли функция eval?


person Nabegh    schedule 15.05.2012    source източник
comment
Чували ли сте някога за хеш-таблица? Поставете вашите низови команди в хеш-таблица със съответните действия (функции) като стойности.   -  person Marcin    schedule 15.05.2012
comment
+Марчин, това е детайл от изпълнението. Все още пишеш преводач. И има много начини да направите това.   -  person Don Stewart    schedule 15.05.2012
comment
@DonStewart Мисля, че е злоупотреба с езика да се описва всяка функция, която приема низове или токени, за да задейства поведение като интерпретатор. Във всеки случай, не е просто детайл, че е много лесно да се внедрят подобни неща на език с първокласни функции.   -  person Marcin    schedule 15.05.2012


Отговори (1)


Почти всеки език поддържа функция eval (дори силно, статично типизирани езици като Haskell). Много езикови среди за изпълнение, създадени за езици, които се изпълняват предимно чрез интерпретация на байт код (като езици, подобни на Lisp, Erlang или Java), поддържат възможността за вмъкване на нов (байт) код по време на изпълнение.

След като можете да вмъкнете нов код динамично, можете да напишете eval.

Scala е пример за такъв език, където JVM е наличен по време на изпълнение.

Дори в езикови реализации без специфична поддръжка за пълно мета-програмиране или дори динамично свързване, често има начини за динамично генериране на код под контрола на програмиста, или чрез механизми за отразяване, или библиотеки за поддръжка на генериране на код (като LLVM).

Освен просто едноетапно оценяване, по-общо, езиците, които поддържат многоетапно изчисление, позволяват генериране на програми от един етап на следващ, за произволен брой етапи, което прави възможно безопасно, произволно влагане на оценки.

Четене във фонов режим

person Don Stewart    schedule 15.05.2012
comment
Можете ли да дадете пример за това как да се оценява динамично кодът в Scala. - person Nabegh; 15.05.2012
comment
comment
Haskell? eval? как? Ще полудея ли, докторе? :) - person Rogach; 15.05.2012