в С# вы можете делать такие вещи, как:
var a = new {name = "cow", sound = "moooo", omg = "wtfbbq"};
и в Python вы можете делать такие вещи, как
a = t(name = "cow", sound = "moooo", omg = "wtfbbq")
Не по умолчанию, конечно, но тривиально реализовать класс t
, который позволяет вам это сделать. Infact Я сделал именно это, когда я работал с Python и нашел его невероятно удобным для небольших контейнеров с отбросами, где вы хотите иметь доступ к компонентам по имени, а не по индексу (который легко смешивать).
Помимо этой детали, они в основном идентичны кортежам в нише, которую они обслуживают.
В частности, я сейчас смотрю на этот код С#:
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 #? Я не против прыгать через некоторые обручи (даже пылающие обручи!) Сейчас, если это означает, что это даст мне что-то полезное для DRY-кода, подобного этому.