Точка с запятой в имени переменной объекта - PullRequest
2 голосов
/ 18 июня 2010

Существует общий атрибут LDAP, называемый userCertificate; двоичный. На самом деле в имени атрибута есть точка с запятой. В ruby ​​я превращаю запись LDAP в объект OpenStruct с именем struct.

>> struct.class
=> OpenStruct

Но, конечно, ruby ​​думает, что это символ конца строки.

?> struct.userCertificate;binary
NameError: undefined local variable or method `binary' for main:Object
        from (irb):52
        from :0

IRB знает, что локальная переменная есть, потому что она дает мне struct.userCertificate;binary на вкладке автозаполнения. Я также вижу переменную класса при вызове struct.methods для него.

>> struct.methods
=> ... "send", "methods", "userCertificate;binary=", "hash", ...

Это определенно есть, я могу увидеть содержимое, если напечатать всю переменную to_s (). Но как я могу получить доступ к локальной переменной, если в ней есть точка с запятой? У меня есть обходные пути для этого, но я подумал, что опубликовать интересную проблему.

Ответы [ 2 ]

7 голосов
/ 18 июня 2010

Синтаксически, я думаю, что нет никакого способа обойти тот факт, что точка с запятой завершает оператор, поэтому я не могу представить, что есть способ сделать именно то, что вы хотите. Однако вы можете использовать метод send для получения значения:

>> struct.send('userCertificate;binary')

Назначение такому члену будет аналогичным:

>> struct.send('userCertificate;binary=', my_binary_data)
0 голосов
/ 18 июня 2010

Я немного растерялся. Вы спрашиваете о том, как получить доступ к локальной переменной, но ваши примеры кода касаются методов?

Если это локальная переменная, то я не знаю, как получить к ней доступ. Однако, если это что-то , но локальная переменная, вы можете использовать соответствующий метод отражения, чтобы получить к ней доступ: Module#const_get для констант, Object#instance_variable_get для переменных экземпляра, Object#send для методов и и так далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...