/ / Използва ли Shapeless отражение и е безопасно да се използва в производствения код на скала? - скала, отражение, безформено

Shapeless използва ли размисъл и е безопасно да се използва в производствения код на скала? - скала, отражение, безформено

Аз все още съм малко объркан за скалатаБиблиотеката Shapeless след като прочете много статии. Изглежда, че Shapeless използва скала компилиране функции? Също така използва размисъл и е безопасно за производствения код?

Отговори:

6 за отговор № 1

Shapeless не използва отражение, използва макросида инспектира структурата на класовете. С Shapeless тази инспекция се случва в времето за компилация, а не по време на изпълнение (размисъл се случва по време на изпълнение). В резултат на това Shapeless може да се счита за по-безопасно от отражение, защото ще може да направи много проверки по време на компилация.

Нека се опитаме да получим поле по име, използвайки безформено

case class MyClass(field: String)
import shapeless._
val myClassLens = lens[MyClass] >> "field
val res = myClassLens.get(MyClass("value")) // res == "value"

ако използваме невалидно име на поле, компилаторът ще се оплаче с грешка при компилирането

От друга страна, ако се опитахме да постигнем товаедно и също нещо, използвайки отражение, името на полето ще бъде проверено по време на работа (може би в производството), затова размисълът не се смята за безопасен, както Shapeless.