Предварительные сведения
Без намного большего контекста трудно понять, что вы действительно пытаетесь сделать или почему вы пытаетесь определить свое поведение в Структуре. Это не значит, что это неправильно; просто не совсем очевидно почему вы хотите сделать это таким образом.
Наследовать от Struct
Тем не менее, код для наследования от Struct довольно прост. В вашем случае вы можете сделать что-то простое:
# Define a class that inherits from the Struct class.
class TwitchUser < Struct.new(:name, :points)
end
# Assign the struct to a variable.
twitcher = TwitchUser.new 'foo', 100
# Access the struct members.
twitcher.name #=> "foo"
twitcher.points #=> 100
Затем вы можете отредактировать значения, назначив непосредственно члену Struct:
twicher.points = 200
Повторное открытие Класс для добавления служебных методов
В качестве альтернативы, вы можете заново открыть свой класс TwitchUser, чтобы расширить его методом, позволяющим что-то делать с членами. Например:
class TwitchUser
def inc
self.points += 1
end
end
twitcher.inc #=> 101
twitcher.points #=> 101
Подход «все в одном»
Очень Ruby способ сделать это - объявить класс для наследования от Struct и включить любые служебные методы, которые вы используете. может захотеть оперировать членами. Например:
class TwitchUser < Struct.new(:name, :points)
def inc
self.points += 1
end
end
Создание массива объектов Struct
Если у вас есть правильный тип объекта для представления вашей проблемной области (независимо от того, является ли она Struct), вы можете создать их массив. Например:
twitch_users = [twitcher]
twitch_users.first.name
#=> "foo"
twitch_users << TwitchUser.new('bar', 200)
twitch_users.last.name
#=> "bar"
Затем вы можете работать с объектами Array of Struct любым удобным для вас способом, чтобы найти или отобразить нужные записи. В качестве одного из возможных примеров:
twitch_users.select { |s| s.name.eql?('foo') }.first.points
#=> 101