Могу ли я получить имя переменной от ее правопреемника?

В моем случае я переместил файл сокета в другое место внутри /etc/my.cnf с /var/lib/mysql/mysql.sock до /tmp/mysql.sock

Даже после перезапуска службы mysqld, я все еще вижу сообщение об ошибке, когда я пытаюсь подключения. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Проблема заключается в том, что клиент настроен. Запуск диагностики фактически покажет правильный путь сокета. например ps aux | grep mysqld

Работы:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Не работает:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Вы можете исправить эту проблему добавив одну и ту же строку сокета в разделе [client] внутри конфигурации mysql.

-1
задан sawa 7 March 2019 в 07:45
поделиться

1 ответ

Технически, да, вроде.

Но вам придется рекурсивно искать все instance_variables каждого объекта. И , как указывает Кэри , объект может быть назначен более чем одной переменной одновременно.

Не делай этого.

Причина, по которой я искал это поведение, заключалась в том, чтобы использовать имя переменной, но также в качестве позиции в сетке данных. Таким образом, если бы имелась двумерная сетка, имена переменных были бы похожи на «AA», «AB», «BC» и т. Д. Он знал его имя, он также знал бы его положение.

То, что вы описываете, - это антишаблон «действие на расстоянии» , где изменения в одной части программы изменяют другую часть программы без очевидной связи. Это нарушает инкапсуляцию; Хорошая инкапсуляция позволяет вам понять отдельную часть системы, просто взглянув на ее входы и выходы. Нарушение инкапсуляции означает, что для понимания одной части системы вы должны понимать каждую часть системы, что приводит к кошмару обслуживания. Современные языки и практики стремятся как можно больше избегать этого.

Например, имя переменной никогда не должно иметь значения для поведения программы. Вы должны быть в состоянии безопасно выполнить рефакторинг Rename Variable , чтобы назвать переменную в соответствии с тем, что имеет смысл для пользователя объекта. В вашем примере это изменило бы поведение программы, нарушающей принцип наименьшего удивления .

Вместо этого у вас будет объект, представляющий вашу Грид, и это будет управлять отношениями между Узлами в Грид. Вместо того, чтобы обгонять отдельные узлы, вы обойдете сетку.

Или каждый Узел может знать, кто их соседние Узлы. Примером этого может служить традиционная структура Tree , Graph или Linked List . Преимущество здесь в том, что нет фиксированной позиции, и структура данных может расти или уменьшаться в любом направлении. Любой Узел может быть обойден, и он знает свое положение в структуре.

0
ответ дан Schwern 7 March 2019 в 07:45
поделиться
Другие вопросы по тегам:

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