Печать данных. Таблица работает только во втором вызове. Странное поведение [дубликат]

Кто-нибудь задается вопросом, как это сделать в ядре EF:

      protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
                {
                    relationship.DeleteBehavior = DeleteBehavior.Restrict;
                }
           ..... rest of the code.....
29
задан smci 25 May 2018 в 10:11
поделиться

2 ответа

Как Дэвид Аренбург упоминает в комментарии , ответ можно найти здесь здесь . Исправлена ​​ошибка в версии 1.9.6, но исправление ввело этот недостаток.

В конце функции следует вызвать DT[], чтобы предотвратить это поведение.

myfunction <- function(dt) {
    dt[, z := y - x][]
}
myfunction(mydt)  # prints immediately
#    x y z
# 1: 1 5 4
# 2: 2 6 4
# 3: 3 7 4 
31
ответ дан Community 15 August 2018 в 22:39
поделиться
  • 1
    DT[] требуется только тогда, когда печать данных. table подавлена, поэтому при использовании функций := или set* – jangorecki 7 October 2015 в 10:39

Извините, если я не должен публиковать что-то здесь, это не ответ, но мой пост слишком длинный для комментария.

Я хотел бы указать, что решение janosdivenyi добавление конечного [] в dt не всегда дает ожидаемые результаты (даже при использовании data.table 1.9.6 или 1.10.4), как я делаю ниже.

Приведенные ниже примеры показывают, что если dt - последняя строка в функции, которая получает желаемое поведение без присутствия конечного [], но если dt не находится в последней строке в функции, то для получения желаемое поведение.

В первом примере показано, что без конечного [] на dt мы получаем ожидаемое поведение, когда dt находится на последней строке функции

mydt <- data.table(x = 1:3, y = 5:7)

myfunction <- function(dt) {
  df <- 1
  dt[, z := y - x]
}

myfunction(mydt)  # Nothing printed as expected

mydt  # Content printed as desired
##    x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4

Добавление конечного [] в dt дает неожиданное поведение

mydt <- data.table(x = 1:3, y = 5:7)

myfunction <- function(dt) {
  df <- 1
  dt[, z := y - x][]
}

myfunction(mydt)  # Content printed unexpectedly
##    x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4

mydt  # Content printed as desired
##    x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4

Перемещение df <- 1 после dt без конечного [] дает неожиданное поведение

mydt <- data.table(x = 1:3, y = 5:7)

myfunction <- function(dt) {
  dt[, z := y - x]
  df <- 1
}

myfunction(mydt)  # Nothing printed as expected

mydt  # Nothing printed unexpectedly

Перемещение df <- 1 после dt с конечным [] дает ожидаемое поведение

mydt <- data.table(x = 1:3, y = 5:7)

myfunction <- function(dt) {
  dt[, z := y - x][]
  df <- 1
}

myfunction(mydt)  # Nothing printed as expected

mydt  # Content printed as desired
##    x y z
## 1: 1 5 4
## 2: 2 6 4
## 3: 3 7 4
0
ответ дан Paul 15 August 2018 в 22:39
поделиться
  • 1
    Я думаю, вы частично запутываете, как работают функции. Все функции возвращают значение. Если вы не напишите явный оператор return(x), то возвращается последнее значение в функции. df <- 1 возвращает значение 1 невидимо , while DT [, x: = y] [] `возвращает DT, печатается. – Frank 20 March 2017 в 16:05
  • 2
    Спасибо за это объяснение. Я не понимал. Я предполагаю, что это «невидимое возвращение». бит, который достал меня. Я также был смущен «копией по ссылке». аспект таблиц данных. Я много лет играл с этими примерами, пытаясь понять их. Теперь вы видите, почему я не отвечаю на вопросы на этом форуме :-) – Paul 21 March 2017 в 17:44
Другие вопросы по тегам:

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