Я читал о подходе OO "свободный интерфейс" в Java, JavaScript и Scala, и мне нравится его внешний вид, но я изо всех сил пытаюсь понять, как это согласовать с более основанный на типах / функциональный подход в Scala.
Чтобы дать очень конкретный пример того, что я имею в виду: я написал клиент API, который можно вызывать следующим образом:
val response = MyTargetApi.get("orders", 24)
Возвращаемое значение из get()
- это тип Tuple3
с именем RestfulResponse
, как определено в моем объект пакета:
// 1. Return code
// 2. Response headers
// 2. Response body (Option)
type RestfulResponse = (Int, List[String], Option[String])
Это отлично работает - и я действительно не хочу жертвовать функциональной простотой возвращаемого значения кортежа - но я хотел бы расширить библиотеку с помощью различных вызовов `` беглых '' методов, возможно, примерно так:
val response = MyTargetApi.get("customers", 55).throwIfError()
// Or perhaps:
MyTargetApi.get("orders", 24).debugPrint(verbose=true)
Как я могу объединить функциональную простоту get()
возврата типизированного кортежа (или подобного) с возможностью добавления дополнительных «плавных» возможностей в мой API?
getOrders
иgetCustomers
по отдельности вместоget("orders")
иget("customers")
с использованием того же методаget
. - person Dan Burton   schedule 30.12.2011get("slug", id)
- мой вопрос не в этом. В любом случае в библиотеке есть еще один более безопасный режим, который выглядит какMyTargetApi.orders.get(id)
- person Alex Dean   schedule 30.12.2011Either
? stackoverflow.com/ вопросы / 1193333 / - person earldouglas   schedule 30.12.2011Either
- интересная идея. Это то, что я буду использовать где-нибудь в моей библиотеке, потому чтоorders.get()
ответ после сортировки будетEither[ErrorRepresentation, OrderRepresentation]
- person Alex Dean   schedule 31.12.2011Reader
иWriter
- person oxbow_lakes   schedule 31.12.2011