2010-06-17 103 views
2

有一个称为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(),我可以看到内容。但是如何访问局部变量,当它有一个分号?我有这方面的解决方法,但我认为这是一个有趣的问题发布。

回答

7

在句法上,我认为没有办法解决分号终止语句的问题,所以我无法想象有一种方法可以完成您想要的功能。但是,您可以使用send方法来检索值:

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

分配给该成员将类似于:

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

这工作就像一个冠军。谢谢。 – squarism 2010-06-18 02:34:46

0

我有点困惑。你在问如何访问一个局部变量,但你的代码示例是关于方法的?

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