Смысл OpenStruct
в том, что вы можете добавлять новые поля на лету.
response = OpenStruct.new(
body: 'foo',
check1: true
)
response.check2 = false
p response
# => #<OpenStruct body="foo", check1=true, check2=false>
Это преимущество only , которое имеет Struct
. Использование OpenStruct
влечет за собой значительное снижение производительности, поэтому если вам не нужно добавлять новые поля позже, его никогда не следует использовать (если, конечно, вы абсолютно не заботитесь о производительности); вместо этого используйте Struct
.
Однако, в частности, в вашем случае синтаксический анализатор Ruby не допускает методы вида check1?=
, так как знак вопроса и знак равенства разрешены только в конце идентификатора; т. е. check1=
является допустимым именем метода, check1?
является допустимым именем метода, но check1?=
не является.
tl; dr: отбросьте знак вопроса.