Аз все още съм малко объркан за скалатаБиблиотеката Shapeless след като прочете много статии. Изглежда, че Shapeless използва скала компилиране функции? Също така използва размисъл и е безопасно за производствения код?
Отговори:
6 за отговор № 1Shapeless не използва отражение, използва макросида инспектира структурата на класовете. С Shapeless тази инспекция се случва в времето за компилация, а не по време на изпълнение (размисъл се случва по време на изпълнение). В резултат на това Shapeless може да се счита за по-безопасно от отражение, защото ще може да направи много проверки по време на компилация.
Нека се опитаме да получим поле по име, използвайки безформено
case class MyClass(field: String)
import shapeless._
val myClassLens = lens[MyClass] >> "field
val res = myClassLens.get(MyClass("value")) // res == "value"
ако използваме невалидно име на поле, компилаторът ще се оплаче с грешка при компилирането
От друга страна, ако се опитахме да постигнем товаедно и също нещо, използвайки отражение, името на полето ще бъде проверено по време на работа (може би в производството), затова размисълът не се смята за безопасен, както Shapeless.