Описание тега structural-typing

Structural typing is the ability of a type system to identify a type based on what data it contains, rather than how a type is named.
1 ответ

Использование структурных типов Scala с абстрактными типами

Я пытаюсь определить структурный тип, определяющий любую коллекцию, которая имеет метод "добавить" (например, коллекция Java). Используя это, я хочу определить несколько функций более высокого порядка, которые работают с определенной коллекцией obje…
28 апр '10 в 01:57
1 ответ

Коллекция структурных параметров типа странности

Это кажется простой вещью, но я не могу этого понять... Это компилирует: object CanFoo1 { def foo(): Unit = { println("Yup, I can foo alright") } } object CanFoo2 { def foo(): Unit = { println("And I can foo with the best") } } trait A { type CanFoo…
11 авг '16 в 12:56
2 ответа

Параметры структурного типа в коллекциях Scala

Отказ от ответственности: это вопрос того, что возможно, а не того, что было бы рекомендовано на практике. Допустим, вы получили следующие классы: case class point1(x: Int, y:Int) case class point2(x: Int, y:Int) case class point3(x: Int, y:Int) и у…
13 мар '13 в 17:01
2 ответа

Почему эта структурная граница не работает должным образом?

Я пытаюсь написать простой вспомогательный метод, который получает что-то, что может быть закрыто, и некоторую функцию, которая получает первый и гарантирует, что "closeable" закрывается после выполнения функции. Например, я хочу использовать это та…
24 янв '11 в 21:37
1 ответ

Можно ли принять произвольный экстрактор в качестве аргумента метода

Я хотел бы повторно использовать существующие экстракторы и составить их. A => Option[B] идеально сочетается с B => Option[C], Но я запутался, как я мог выразить такое отношение в коде. Очевидный способ не доступен по уважительной причине: typ…
2 ответа

Почему Scala использует отражение для вызова метода структурного типа?

Если функция принимает структурный тип, она может быть определена как: def doTheThings(duck: { def walk; def quack }) { duck.quack } или же type DuckType = { def walk; def quack } def doTheThings(duck: DuckType) { duck.quack } Затем вы можете исполь…
16 дек '11 в 19:55
1 ответ

Почему этот статически типизированный членский доступ считает это геттером?

rvm это объект, а не функция. Почему ограничение (^b:(member ReportSubTitle:(String -> unit)) rvm ) придумать как получатель вместо установщика? Это всплывающая подсказка или что-то еще? Везде, где я использовал дженерики со статической типизаци…
03 авг '15 в 17:21
2 ответа

Структурный тип Scala как параметр типа функции

Я хочу создать некоторую функцию "общего сумматора", которая будет работать для всех типов, которые поддерживают операцию "+". Я пробовал структурную типизацию как параметр типа функции, но это не компиляция: def f[T <: { def +(x: T): T} ](a: T, …
01 июн '14 в 08:41
2 ответа

Забавное наблюдение о (рекурсивных) структурных типах в Scala

Мне нужен был некоторый рекурсивный структурный тип в некотором куске кода, использующий черты и структурный тип в качестве ограничения параметра типа. Это работало нормально, но позже я узнал, что Scala не поддерживает рекурсивные структурные типы.…
04 сен '10 в 19:29
2 ответа

Почему вывод типа не работает здесь?

Эта проблема возникла в модуле, который я пишу, но я сделал минимальный случай, который демонстрирует такое же поведение. class Minimal[T](x : T) { def doSomething = x } object Sugar { type S[T] = { def doSomething : T } def apply[T, X <: S[T]] (…
27 апр '12 в 00:34
1 ответ

Структурная типизация для Traversable

У меня есть этот метод: scala> def foo(traversable: Traversable[{def toByte: Byte}]) = { | traversable.map(_.toByte) | } foo: (traversable: Traversable[AnyRef{def toByte: Byte}])Traversable[Byte] Но когда я называю это так: scala> foo(List(1,2…
26 мар '12 в 04:05
2 ответа

Образцы, соответствующие структурным типам в Scala

Почему это печать WTF? Сопоставление с образцом не работает на структурных типах? "hello" match { case s: { def doesNotExist(i: Int, x: List[_]): Double } => println("wtf?") case _ => println("okie dokie") }
01 янв '10 в 08:26
1 ответ

Структурное отражение подтипа

Можем ли мы получить тип val s: String используя отражение снаружи функции f? val f = (r: {val s: String}) => { }
01 ноя '12 в 21:01
1 ответ

Структурный подтип потока "забывает" определенные свойства подтипа?

В настоящее время я изучаю структурное типирование. Я скептически отношусь к идее, что два типа считаются эквивалентными только потому, что они имеют общую часть своей структуры. Это похоже на статическую типизацию утки и полностью игнорирует семант…
4 ответа

Дополнительная возможность структурной типизации в C++ или любом другом языке?

В C++, как сказать компилятору, что Ogre::Vector3 IS_SAME_AS SomeOtherLIB::Vector3? Я чувствую это... в таких языках, как с ++, которые не являются структурно типизированными, но в некоторых случаях это имеет смысл. Обычно в качестве разработчика иг…
1 ответ

Класс с типизированным шрифтом только для чтения не конфликтует с обычным классом машинописного текста, если структура такая же

Я знаю, что машинопись имеет структурный механизм печатания. Я ожидаю, однако, что если у вас есть такой класс: class Country { id: string; name: string; } и один определяется так: class ReadonlyCountry { readonly id: string; readonly name: string; …
09 янв '17 в 13:20
4 ответа

Clojure Protocols против Scala Структурные Типы

После просмотра интервью с Ричем Хикки о протоколах в Clojure 1.2 и очень мало зная о Clojure, у меня есть несколько вопросов о протоколах Clojure: Они предназначены для того же, что и структурные типы в Scala? Какие преимущества имеют протоколы по …
1 ответ

Применить метод, используемый в типе [Scala]

Я просматривал Scala-код и обнаружил, что метод apply также используется в type,Пример: type Common = { def apply: {val func: {} => {val a: A}; val c: C} => {val b: B} } Что означает приведенный выше код? Как я понимаю, это означает, что Commo…
14 апр '17 в 11:30
1 ответ

Обобщенное соответствие структурного типа в Scala

Меня интересует проблема соответствия определенного типа более общему структурному типу. Рассмотрим следующие примеры: trait Sup trait Sub extends Sup type General = { def contra(o: Sub): Unit def co(): Sup def defaults(age: Int): Unit def defaults2…
12 авг '10 в 20:21
1 ответ

Тест на совместимость типов

Поддерживает ли Typescript прямой тест на совместимость структурных типов? C# поддерживает is Оператор и типы поверхности IsAssignableFrom(object instance) if (foo is SomeType) ... if (SomeType.IsAssignableFrom(foo)) ... Есть ли какой-нибудь прямой …
17 май '16 в 04:09