На самом деле это работает так же, как и другие.
struct T<'a> {
f: &'a Fn(&'a i32),
}
Это определение говорит, что функция f
будет жить в 'a
, и ее параметр также должен жить 'a
.
Рассмотрим время жизни fn main()
как 'm
, а время жизни внутренней области как 'i
. Вы создаете свою структуру в main
, поэтому ее время жизни будет 'm
, она будет жить в main
, если вы не перейдете в другую область.
t.f
, создан в 'i
. Согласно определению; аргумент и функция должны жить в одной и той же жизни. Но 'm
больше, чем 'i
. Так что это не приемлемо. 'i
. Это можно считать временем жизни f
равным его аргументу. Так что это обеспечивает определение. Если вы измените определение, как показано ниже, удалив ограничение из параметра. Таким образом, компилятор может определить подходящее время жизни аргумента, оно может быть больше, равно или меньше времени жизни.
//this means your f and it's argument's life time can be different
struct T<'a> {
f: &'a Fn(&i32),
}
Все ваши примеры будут действительны.
Здесь вы можете найти рабочие примеры в Playground
возможно, это немного нетрадиционное
, Если у меня есть случай как
/var/www/namedir/ <= root
/var/www/namedir/example/example.php <= file to include
-- directory when i need the include --
/var/www/namedir/dir1/page.php
/var/www/namedir/dir1/dirA/page.php
/var/www/namedir/dir1/dirB/page.php
решение, которое я использую, просто. получите путь перед "Dir1"
что-то вроде этого
include (substr(dirname(__FILE__),0,strpos(dirname(__FILE__), '/dir1'))."/example/example.php");
, я нашел это полезным идентификатором, я должен переименовать основной subdir, например, от
/var/www/namesite/internalDirA/dirToInclude/example.php
/var/www/namesite/internalDirA/dir1/dirA/example.php
/var/www/namesite/internalDirA/dir1/dirB/example.php
К
/var/www/namesite/dirReserved/dirToInclude/example.php
/var/www/namesite/dirReserved/dir1/dirA/example.php
/var/www/namesite/dirReserved/dir1/dirB/example.php
Я предполагаю, что под корневой папкой вы подразумеваете корень веб-документа, а не корень файловой системы.
Для этого вы можете либо
include ('example / example.php')
include ($ _ SERVER ['DOCUMENT_ROOT']. '/ Example / example.php')
include () (и многие другие функции, такие как require (), fopen () и т. Д.), Все работают в локальной файловой системе, а не в корне сети.
Итак, когда вы что-то делаете вот так
include( "/example/example.php" );
Вы пытаетесь включить из корня вашей * nix-машины.
И хотя есть множество способов подойти к тому, что вы делаете, предложения Пола Диксона, вероятно, будут вашим лучшим выбором.