Языки, которые позволяют именованные кортежи

Код, как будто следующий программист, занимающий проект, является серийным убийцей. Другими словами, используйте вторую опцию, которую Вы упомянули.

16
задан wonea 7 March 2018 в 15:58
поделиться

6 ответов

In C#, you have anonymous types; these are similar but have their own limitations:

var result = new { Speed = 12.4, Distance = 8, Caption = "car 1" };

However, it is hard to consume these as a caller, unless you use "cast by example" (brittle), reflection, or dynamic. Of the three, the last is the most appetising.

dynamic result = GetSomething();
Console.WriteLine(result.Speed);
Console.WriteLine(result.Distance);

In most cases, it would be a better idea just to use a regular class - but this approach does have some practical uses; for example, look at how they are used in ASP.NET MVC to pass around configuration information simply and conveniently (which would otherwise require a dictionary). A bit like how jQuery allows you to pass options as properties on an object.

18
ответ дан 30 November 2019 в 15:04
поделиться

Eiffel допускает именованные кортежи.

6
ответ дан 30 November 2019 в 15:04
поделиться

Я не уверен, что это именно то, что вы ищете, но в Haskell вы можете иметь запись с указанными именами и типами:

data Movement = Movement { speed :: Double, distance :: Int } deriving (Show)

main = do
    print $ Movement 3.14 100
    print Movement {distance = 5, speed = 2.1}
    print Movement {speed = 9, distance = -4}

output:

Movement {speed = 3.14, distance = 100}
Movement {speed = 2.1, distance = 5}
Movement {speed = 9.0, distance = -4}

Но технически это не кортеж . В Haskell есть кортежи, но, насколько мне известно, они не могут именоваться

. Это действительно не так уж и далеко от простой структуры в любом языке, производном от C. Может я что-то упустил в вопросе.

3
ответ дан 30 November 2019 в 15:04
поделиться

Вы имеете в виду, что-то вроде Python collections. namedtuple ? Ну, Python (текущие версии 2.6 и 3.1) их поддерживает ;-). А если серьезно, я не знаю ни одного языка со статической типизацией, в котором бы они были встроены.

3
ответ дан 30 November 2019 в 15:04
поделиться

Что плохого в использовании структур или классов в C #?

public class SpeedDistance{
  public double Speed;
  public int Distance;
}
2
ответ дан 30 November 2019 в 15:04
поделиться

Я не уверен, для чего вам это нужно - кортеж - это просто структура, содержащая разные типы данных. Если вам действительно нужны именованные свойства, вам придется создать собственный тип или создать анонимный тип на лету.

Я не знаю ни одного статически типизированного языка, который бы поддерживал бы это, но C # определенно не поддерживает.

-1
ответ дан 30 November 2019 в 15:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: