有一个常见的LDAP属性叫做userCertificate; binary.它实际上在属性名称中有一个分号.在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(),我可以看到内容.但是,如果局部变量中有分号,我该如何访问?我有相关的解决方法,但我认为这是一个有趣的问题.
从语法上讲,我认为没有办法解决分号终止语句这一事实,所以我无法想象有一种方法可以完全按照你的意愿行事.但是,您可以使用该send方法来检索值:
>> struct.send('userCertificate;binary')
Run Code Online (Sandbox Code Playgroud)
分配给这样的成员将是类似的:
>> struct.send('userCertificate;binary=', my_binary_data)
Run Code Online (Sandbox Code Playgroud)