В Ruby s = "foo", а s является объектом класса String, но s не имеет переменных экземпляра? - PullRequest
2 голосов
/ 22 марта 2011

При использовании Ruby 1.9.2,

s = "foo"
s.class                # => String
s.instance_variables   # => []

поэтому s является объектом класса String, и, поскольку он принадлежит классу, который реализует концепцию строки, состоящей из последовательных символов, поэтому должны быть переменные экземпляра для объекта класса String для хранения этой информации так почему же instance_variables возвращает пустой массив? Это потому, что (1) что он должен вернуть? Он не может вернуть некоторую переменную экземпляра, которая в свою очередь является объектом String. (2) Является ли это «волшебным» моментом, когда существуют переменные экземпляра, но они являются внутренними по отношению к Ruby ... и это происходит под капотом и может считать его «происходящим по волшебству» ... предположим, у меня есть класс, который содержит перевод фразы на 3 разных языка, затем есть @french, @spanish, @latin, и это происходит на "немагическом" уровне, а переменные экземпляра будут отображаться для instance_variables.

Есть ли способ распечатать внутренние переменные экземпляра класса String?

1 Ответ

5 голосов
/ 22 марта 2011

String является фундаментальным типом в Ruby. Как вы сказали, для Ruby не имеет смысла раскрывать внутреннюю реализацию, поскольку у Ruby нет способа представить вам данные, кроме как в виде String.

То же относится и к другим основным типам:

> 3.instance_variables
=> []

Нет никаких средств или причин, чтобы раскрыть вам внутреннюю реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...