Создайте только один конструктор и убедитесь, что этот конструктор использует все, что сделал ваш первый конструктор, но добавил ApplicationDbContext
в качестве другого параметра. Поэтому, если ваш исходный конструктор взял параметры a
, b
, удалите новый конструктор и добавьте конструктор dbcontext
к конструктору, который принимает a
, b
, чтобы теперь быть a
, b
, dbcontext
-
Могут ли существовать компиляторы, которые не обрабатывают файлы до промежуточного состояния?
blockquote>Да, такой компилятор может существовать. Компилятор преобразует читаемый человеком текст в машиночитаемые инструкции, и не требуется, чтобы он проходил через промежуточную форму. Однако десятилетия исследований в области компиляторов показали, что наличие промежуточной формы облегчает компиляцию и создает лучший код.
Могут ли существовать «независимые от языка компиляторы»?
blockquote>Нет, этого нельзя сделать так же, как «не зависящий от языка переводчик» не может существовать для человеческих языков. ,
Первая проблема заключается в том, что разные языки имеют разный синтаксис , поэтому вы не знаете, как слова и символы можно соединить, чтобы сделать правильные утверждения.
Вторая проблема заключается в том, что разные языки имеют различную семантику , поэтому вы не знаете, что означают слова и символы. Например, есть оператор
for
в Scala и операторfor
в C, но то, что они на самом деле делают, очень отличается.И если у вас возникнет желание изобрести новый язык, совместимый со всеми другими языками, вот предупреждение XKCD о стандартах
Нет, вы не можете написать компилятор для нескольких языков. Например, что должна делать эта программа?
foo = print "Hello, World!"
В Haskell она компилируется, но ничего не делает, тогда как в Python 2 она печатает выходные данные. Компилятор не может знать, какой язык выбрать, так как он действителен на обоих языках.
Однако вы можете написать программу, которая делает одно и то же на нескольких языках. Это называется полиглот . Вот наша вышеуказанная программа, модифицированная как полиглот на Haskell и Python 2:
main = print "Hello, World!"
Что касается написания кода, который выглядит «странно», как код в вашем примере в Scala, он называется внутренним DSL и на самом деле не редкость.