有一个名为userCertificate; binary的常见LDAP属性。它实际上在属性名称中有一个分号。在ruby中,我将LDAP条目转换为名为“struct”的OpenStruct对象。
>> struct.class => OpenStruct
但当然,红宝石认为这是一个行尾的角色。
?> 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(),我可以看到内容。但是,如果局部变量中有分号,我该如何访问?我有相关的解决方法,但我认为这是一个有趣的问题。
答案 0 :(得分:7)
从语法上讲,我认为没有办法解决分号终止语句这一事实,所以我无法想象有一种方法可以完全按照你的意愿行事。但是,您可以使用send
方法检索值:
>> struct.send('userCertificate;binary')
分配给这样的成员会是类似的:
>> struct.send('userCertificate;binary=', my_binary_data)
答案 1 :(得分:0)
我有点困惑。您询问的是如何访问本地变量,但您的代码示例是关于方法的?
如果它是局部变量,那么我不知道如何访问它。但是,如果它是但是一个局部变量,那么您可以使用适当的反射方法来访问它:Module#const_get
表示常量,Object#instance_variable_get
表示实例变量,{ {1}}用于方法等。