в C # вы можете делать такие вещи, как:
var a = new {name = "cow", sound = "moooo", omg = "wtfbbq"};
, а в Python вы можете делать такие вещи, как
a = t(name = "cow", sound = "moooo", omg = "wtfbbq")
Не по умолчанию, конечно, но тривиально реализоватькласс t
, который позволяет вам это сделать.Фактически, я сделал именно это, когда работал с Python и обнаружил, что это невероятно удобно для небольших одноразовых контейнеров, где вы хотите иметь возможность доступа к компонентам по имени, а не по индексу (что легко смешать).
Кроме этих деталей, они в основном идентичны кортежам в нише, которую они обслуживают.
В частности, я сейчас смотрю на этот код C #:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
и это F # эквивалент
type Route = {
controller : string
action : string
id : UrlParameter }
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
{ controller = "Home"; action = "Index"; id = UrlParameter.Optional } // Parameter defaults
)
Что является как многословным, так и повторяющимся, не говоря уже о довольно раздражающем.Насколько близко вы можете получить такой синтаксис в F #?Я не возражаю прыгать через некоторые обручи (даже горячие обручи!) Сейчас, если это означает, что это даст мне что-то полезное для СУХОГО кода, подобного этому.