对象变量名中的分号

squ*_*ism 2 ruby ldap

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

mae*_*ics 7

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

>> struct.send('userCertificate;binary')
Run Code Online (Sandbox Code Playgroud)

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

>> struct.send('userCertificate;binary=', my_binary_data)
Run Code Online (Sandbox Code Playgroud)