Я пишу некоторый clojure код, и я полагаюсь на время Joda в течение времени, обрабатывая. Проблема состоит в том, что я не знаю, что импортировать, и документация ужасно не соглашается с этим. Теперь я знаю, что кто-то здесь может, вероятно, дать мне корректный ответ меньше чем через 5 секунд, но я знал бы, как понять этого самостоятельно (кроме заливки через документы, пока я не нахожу корректный ответ).
Если бы я делал это в Python, то я импортировал бы пакет верхнего уровня и использовал бы комбинацию dir
и help
выяснять то, что я должен импортировать. Там какой-либо путь состоит в том, чтобы сделать это в clojure? Или есть ли какие-либо другие виды инструментов Java для понимания этого? Я предпочел бы что-то, что это - ориентированная командная строка.
Обычно я бы выбрал ответ Дэвида Гранта, но если вы не можете найти JavaDoc (!), но у вас есть jar-файл, вы можете использовать утилиту jar, чтобы перечислить файлы в jar-файле.
Каталог, в котором находятся файлы класса, находится непосредственно на карте под именем пакета. Например, jar -tf joda-time-1.6.jar | more
перечисляет DateTime.class как org/joda/time/DateTime.class
; DateTime находится в пакете org.joda.time
.
Подобно тому, как dir
и help
проверяют документацию пакетов на Python, полезную информацию на Java можно почерпнуть из чтения документации Javadocs для конкретного API. В случае Joda Time на веб-сайте есть прямая ссылка на созданную документацию, здесь:
http://joda-time.sourceforge.net/api-release/index.html (см. Внизу левый кадр)
Я не могу придумать ничего, что было бы напрямую сопоставимо с тем, что вы спрашиваете, поскольку, если вы не спросите загрузчик классов для определенного класса, загрузчик классов не загрузит его, и вы не сможете найти это.
вектор:
список:
В общем, используйте вектор, когда вам все равно, какой тип последовательного контейнера вы используете, но если вы делаете много вставок или стираний в и из любого места в контейнере, кроме конца, вы хотите использовать список. Или если вам нужен произвольный доступ, то вам нужен вектор, а не список. Кроме того, есть естественные случаи, когда вам понадобится то или иное, основанное на вашем приложении, но в целом это хорошие рекомендации.
-121--605695-Интересный вопрос. Я бы сказал, что это невозможно вообще , но давайте посмотрим
Цитирование IBM - что нового в PHP5.3, Part 2
Замыкание - это функция, которая оценивается в собственной среде, которая имеет одну или несколько связанных переменных, которые могут быть доступны при вызове функции.
и далее (акцент мой)
Переменные, которые будут импортированы из внешней среды, указаны в предложении использования определения функции замыкания. По умолчанию они передаются значением , что означает, что если мы будем обновлять значение, переданное в определении функции замыкания, оно не будет обновлять внешнее значение.
Использование global
будет проходить по ссылке, и хотя можно связать переменные по ссылке с закрытием с помощью и
в предложении use
, это уже является отклонением от 5,3 поведения по умолчанию.
$var = 'yes';
$fn = create_function('', 'global $var; $var = "no";');
$fn();
echo $var; // outputs no
Можно скопировать глобальную переменную, чтобы использовать ее по значению, хотя, например,
$var = 'yes';
$fn = create_function('', 'global $var; $tmp = $var; $tmp = "no";');
$fn();
echo $var; // outputs yes
Кроме того, значение глобальной переменной (при использовании create _ function
) не будет вычисляться (привязываться) при создании функции, но при выполнении функции
$var = 'yes';
$fn = create_function('', 'global $var; $tmp = $var; return $tmp;');
$var = 'maybe';
echo $fn(); // outputs maybe
$var = 'yes';
$fn = function() use ($var) { return $var; };
$var = 'maybe';
echo $fn(); // outputs yes
Также важно
При определении в объекте удобным является то, что закрытие имеет полный доступ к объекту через переменную $ this, без необходимости явно импортировать его. * Хотя я думаю, что это было отброшено в окончательном PHP5.3
Это невозможно с глобальным
ключевым словом, и вы также не можете просто использовать $ это
. Нет пути ссылаться на свойство из класса при определении тела функции с помощью create _ function
.
class A {
protected $prop = 'it works';
public function test()
{
$fn = create_function('', 'echo $this->prop;');
return $fn;
}
}
$a = new A;
$fn = $a->test();
$fn();
приведет к
Fatal error: Using $this when not in object context
Для суммирования
В то время как вы можете создать функцию, импортирующую переменную из глобальной области, вы не можете создать ее с помощью переменных из другой области. И поскольку вы технически не привязываетесь при использовании create _ function
, но импортируете при выполнении созданной функции, я хотел бы утверждать, что это ограничение делает закрытие лямбда .
EDIT: Решение, предложенное Онно Марсманом ниже, довольно приличное, хотя. Он не полностью имитирует закрытия, но реализация довольно близка.
-121--3338940-Билл Клементсон написал небольшой фрагмент кода , который помогает просмотреть документацию javadoc из REPL.
Структуры также могут иметь конструкторы, поэтому можно сделать то же самое с ними, что и в примере класса.
-121--3320678-Если вы специально делаете это на странице успешного завершения операции - в success.phtml - то код для получения идентификатора приращения заказа уже доступен в шаблоне, так как он отображается клиенту.
Вам просто нужно следующее:
$orderId = $this->getOrderId();
Обратите внимание, что это не будет работать на других страницах, поэтому для них вам необходимо использовать:
$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
-121--1725332- http://dishevelled.net/Generating-Clojure-import-lines-using-SLIME.html Делает очень легко искать импорт. Лично я просто использую функцию clojure find-classes, определенные там из REPL.