Ошибка сегментации связана с ограничением памяти стека при использовании OpenMP. Использование решений из предыдущего ответа не решило проблему для меня в ОС Windows. Использование памяти в куче, а не в стеке, похоже, работает:
integer, parameter :: nmax = 202000
real(dp), dimension(:), allocatable :: e_in
integer i
allocate(e_in(nmax))
e_in = 0
! rest of code
deallocate(e_in)
Плюс это не связано с изменением каких-либо параметров среды по умолчанию.
Подтверждение и обращение к решению ohm314 здесь: большой массив с использованием распределения памяти кучи
В JavaScript функция - это объект, очень похожий на другие объекты.
Вы можете назначить функцию переменной.
let foo = function () {
return "bar"
}
И позже вы можете добавить скобки к этому имени переменной для вызова функции.
foo() // Returns "bar".
Вы можете передавать переменную, как и любую другую переменную, например, в качестве параметра другой функции.
function baz (some_function) {
return some_function()
}
baz(foo) // Returns "bar".
Это то, что происходит в вашем примере. this.name
передается в функцию, которая обрабатывает событие onChange
, и в какой-то момент внутри этой функции он добавляет скобки для оценки переданной вами функции.
Вот почему, если вы добавляете круглые скобки при передаче функции, функция оценивается, и результат передается:
baz(foo()) // Uncaught TypeError: some_function is not a function
Здесь, foo()
уже вычислено, и переменная some_function
в baz
содержит строку "bar"
вместо функции.
Функция «без фигурных скобок» является указателем на некоторую функцию.
Вот пример.
let bananas = function(){ console.log('bananas') }
Когда вы делаете это, вы не вызываете функцию, а только ссылаетесь на нее, только создаете указатель на функцию. С этой ссылкой вы можете звонить bananas()
в любое время, а не только когда код читается.
Причина, по которой вы передаете только ссылку на функцию в реакции, заключается в том, что внутри компонента, где он будет вызывать функцию.
Если вы просто сделаете это <input type="text" onChange={this.name()} />
, во время рендеринга ввода вызывается name()
, но если вы передаете только ссылку на функцию, реакция будет вызывать функцию только тогда, когда событие (onChange) случается.
В JavaScript функции являются значениями. Это означает, что его можно использовать в любом контексте выражения, например, передавать значения в функции или возвращать из функций. Значение функции - это ее собственное имя. Не следует путать с возвращаемым значением функции .
Круглые скобки - это оператор JavaScript, используемый для создания выражений вызова функции , между другими вариантами использования.
В вашем случае вы передаете значение this.name
для свойства onChange
элемента React input
. onChange
ожидает, что function value
будет вызван в ответ на событие изменения . Таким образом, сам React будет вызывать функцию, используя для этого в этом контексте оператор круглых скобок.
Если в противном случае вы написали this.name()
, вы уже выполняете вызов функции, что приведет к ошибке, так как вы игнорируете ожидаемое поведение React.