对象变量名中的分号

时间:2010-06-17 20:44:28

标签: ruby ldap

有一个名为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(),我可以看到内容。但是,如果局部变量中有分号,我该如何访问?我有相关的解决方法,但我认为这是一个有趣的问题。

2 个答案:

答案 0 :(得分:7)

从语法上讲,我认为没有办法解决分号终止语句这一事实,所以我无法想象有一种方法可以完全按照你的意愿行事。但是,您可以使用send方法检索值:

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

分配给这样的成员会是类似的:

>> struct.send('userCertificate;binary=', my_binary_data)

答案 1 :(得分:0)

我有点困惑。您询问的是如何访问本地变量,但您的代码示例是关于方法的?

如果它是局部变量,那么我不知道如何访问它。但是,如果它是但是一个局部变量,那么您可以使用适当的反射方法来访问它:Module#const_get表示常量,Object#instance_variable_get表示实例变量,{ {1}}用于方法等。