Редактирование: Видел ответы, отправленные, в то время как я писал, Хеш [a.flatten] кажется способом пойти. Должно быть, пропустил тот бит в документации, когда я продумывал ответ. Мысль решения, которые я записал, может использоваться в качестве альтернатив при необходимости.
вторая форма более проста:
a = [[:apple, 1], [:banana, 2]]
h = a.inject({}) { |r, i| r[i.first] = i.last; r }
= массив, h = хеш, r = хеш возвращаемого значения (тот мы накапливаемся в), я = объект в массиве
самый опрятный способ, которым я могу думать о выполнении первой формы, является чем-то вроде этого:
a = [:apple, 1, :banana, 2]
h = {}
a.each_slice(2) { |i| h[i.first] = i.last }
Не элегантно ... НО ВЫ МОЖЕТЕ СДЕЛАТЬ ЭТО !
$ a = 10 // становится $ a = '0a'; $$ a = 10;
Дополнение: делайте это только в том случае, если вы
У меня была такая же мысль раньше, но если вы действительно думаете об этом, вы ' Я пойму, почему это невозможно ... предположительно ваша функция debug
будет определена следующим образом: function debug ($ someVar) {}
, и у нее нет возможности узнать, что исходная переменная была называется $ myvar
.
Лучшее, что вы могли бы сделать, это посмотреть что-то вроде get_defined_vars ()
или $ _ GLOBALS
(если бы это был глобальный по какой-то причине) и прокрутите это, чтобы найти что-то, что соответствует значению вашей переменной. Однако это очень хакерский и не очень надежный метод. Ваш исходный метод - наиболее эффективный.
Лучшее, что вы могли бы сделать, - это посмотреть что-то вроде get_defined_vars ()
или $ _ GLOBALS
(если он был глобальным по какой-то причине) и пролистать его, чтобы найти что-то, что соответствует значению вашей переменной. Однако это очень хакерский и не очень надежный метод. Ваш исходный метод - наиболее эффективный.
Лучшее, что вы могли бы сделать, - это посмотреть что-то вроде get_defined_vars ()
или $ _ GLOBALS
(если он был глобальным по какой-то причине) и пролистать его, чтобы найти что-то, что соответствует значению вашей переменной. Однако это очень хакерский и не очень надежный метод. Ваш исходный метод - наиболее эффективный.
Нет, чем ближе вы будете get - это get_defined_vars ().
EDIT : Я был неправ, после прочтения комментариев пользователя к get_defined_vars () это возможно с помощью небольшого хака:
function ev($variable){
foreach($GLOBALS as $key => $value){
if($variable===$value){
echo '<p>$'.$key.' - '.$value.'</p>';
}
}
}
$lol = 123;
ev($lol); // $lol - 123
Работает только для уникального содержимого переменных хотя.
Вы можете использовать eval:
function debug($variablename)
{
echo ($variablename . ":<br/>");
eval("global $". $variablename . ";");
eval("var_dump($" . $variablename . ");");
}
Использование: debug ("myvar")
not debug ($ myvar)