Ruby Protobuf构造消息时报错未知字段event_data问题求助
错误原因
Ruby 版 Protobuf 对 oneof 类型字段的初始化规则和其他语言不同:oneof 本身是字段分组标识,不是可赋值的字段名,不能将event_data作为参数 key 传入构造方法。
正确写法
你可以直接将 oneof 分组下的具体字段作为顶层参数传入,Protobuf 会自动识别并完成 oneof 分支的赋值,有两种常用写法:
写法1:直接传嵌套参数(更简洁)
message = Myapp::Event.new( entity: :SECOND, name: "started", second_event_data: { metadata_url: "local-dev-url" } )
写法2:显式创建子消息实例
# 先构造子消息 second_data = Myapp::Event::SecondEventData.new(metadata_url: "local-dev-url") # 构造主消息 message = Myapp::Event.new( entity: :SECOND, name: "started", second_event_data: second_data )
验证
构造完成后可以通过message.event_data获取到你传入的SecondEventData实例,确认赋值正确:
puts message.event_data.metadata_url # 输出 local-dev-url puts message.event_data.class # 输出 Myapp::Event::SecondEventData
内容的提问来源于stack exchange,提问作者Mr H
相关产品推荐
相关产品推荐

