В чем разница между этими 2 частями кода в Scala - PullRequest
0 голосов
/ 23 декабря 2018

Я хочу понять разницу между этими двумя кодами.

Давайте рассмотрим следующие 2 кода в Scala.

  trait Expressions {
    // Bunch of functions
  }

КОД 1:

trait Scheduling{
      val IR : Expressions
      import IR._
      // Bunch of functions
   }

КОД 2:

  trait Scheduling extends Expressions { 
    // Same Bunch of functions
  }

В чем разница между этими двумя кодами?Спасибо

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Вот некоторые ключевые различия между двумя версиями Scheduling:

Объекты, которые наследуются от Scheduling в CODE1 ...

  • Должен предоставить val IR типа Expressions
  • иметь дополнительный член IR, видимый снаружи объекта
  • Может использовать подкласс Expressions с различными реализациями методов вExpressions
  • Может обращаться ко всем методам Expressions как IR.<method>

Объекты, которые наследуются от Scheduling в CODE2 ..

  • Имеют тип Expressions
  • Может получить доступ ко всем методам Expressions напрямую
0 голосов
/ 23 декабря 2018

Ваш первый фрагмент кода требует, чтобы у любого класса, расширяющего черту, была переменная с именем IR типа Expressions.Все члены этой переменной затем импортируются, чтобы их можно было использовать в вашей «связке функций».Экземпляр Expression является агрегированным .

Во втором примере вы наследуете черту.Для этого необходимо, чтобы класс, реализующий вашу черту, также реализовал черту Expressions.

Оба примера приводят к одной и той же семантике: реализация всех членов черты Expressions доступна для вашей "Связкиметоды».Единственное отличие состоит в том, что агрегация немного более гибкая, поскольку вы можете использовать любой объект, который реализует Expressions.

. Ваш второй пример может рассматриваться как эквивалент первого, если ваша реализация черты определяет val IR = this.

...