Size: a a a

Saint P Ruby Community

2020 December 06

RI

Rustam Ibragimov in Saint P Ruby Community
wi11son
а еще я раньше делал так
IO.methods - 1.methods - ''.methods - [].methods - Kernel.methods

а теперь делаю так
IO.methods(false)
O.O
источник

RI

Rustam Ibragimov in Saint P Ruby Community
но все равно прикольно) (прикольен первый вариант :) )
источник

АШ

Алексей Шеин... in Saint P Ruby Community
а я обычно делаю
cd MyKlass
ls
источник

w

wi11son in Saint P Ruby Community
это pry
источник

ME

Makar Ermokhin in Saint P Ruby Community
wi11son
а еще я раньше делал так
IO.methods - 1.methods - ''.methods - [].methods - Kernel.methods

а теперь делаю так
IO.methods(false)
О, вот это топ. Я все время забываю, как это правильно делать
источник

w

wi11son in Saint P Ruby Community
ща Руст нас спросит "а вы точно рубисты?"
источник

RI

Rustam Ibragimov in Saint P Ruby Community
неее)

всякие фишки есть) зависит от того, как часто в практике приходится юзать))
одна из фишек: как взять например синглтон-объект инстанса BasicObject'а (у бэйсик-обжекта минимальный интерфейс, и там нет singleton_class-метода):

a = BasicObject.new
a_snglt = class << a; self; end


или:

a = = BasicObject.new
::Kernel.method(:singleton_class).unbind.bind_call(a) # bind_call в 2.7, bind(a).call в версиях ниже


много приколюх можно придумать)
источник

m

max in Saint P Ruby Community
вы мне лучше скажите почему в ванильном руби нет метода для получения родительского namespace?
A::B::C.??? -> A::B
(и я не про nesting)
источник

RI

Rustam Ibragimov in Saint P Ruby Community
видимо, только если скомбинировать игры с ObjectSpace, .ancestors, .included_modules и проверкой типов объектов-классов 🤔
источник

VD

Vla Dem in Saint P Ruby Community
max
вы мне лучше скажите почему в ванильном руби нет метода для получения родительского namespace?
A::B::C.??? -> A::B
(и я не про nesting)
Потому что в руби нет namespace’ов.
А ещё можно сделать D = A::B::C (иногда называют алиасом класса); делают одно и то же, но неймспейсы разные — это лишь подчёркивает, что namespace — это всего лишь именование, ничего больше; никаких связей нет (и методов поэтому нет)
источник

m

max in Saint P Ruby Community
какой еще алиас класса?!
если я загуглю ruby namespace то там будет много релевантных ссылок, а если ruby class alias то я не нахожу ничего из того что вы говорите. (максимум про keyword alias, но он для методов)
подскажите, пожалуйста, как найти релевантные доки на то о чем вы говорите?

это всё - константы, неважно какого они типа. и они могут быть вложенные
D = A::B::C - объявление константы D в top level namespace. да, ей присваивается значение константы A::B::C, но это уже не важно
источник

m

max in Saint P Ruby Community
как минимум есть вложенность (nesting)
Module.nesting  https://ruby-doc.org/core-2.5.3/Module.html#method-c-nesting

и термин namespace регулярно употребляется в доках, например в Module.const_get и Module.autoload и в статьях по ruby constant resolution

а вот про алиас класса я слышу впервые =\
источник
2020 December 07

PP

Pavel Peganov in Saint P Ruby Community
max
какой еще алиас класса?!
если я загуглю ruby namespace то там будет много релевантных ссылок, а если ruby class alias то я не нахожу ничего из того что вы говорите. (максимум про keyword alias, но он для методов)
подскажите, пожалуйста, как найти релевантные доки на то о чем вы говорите?

это всё - константы, неважно какого они типа. и они могут быть вложенные
D = A::B::C - объявление константы D в top level namespace. да, ей присваивается значение константы A::B::C, но это уже не важно
Ну, вот D в этом случае и будет алиасом класса A::B::C, ежели это правда класс.
Это не какой-то специальный термин, это буквально алиас, т. е. альтернативное имя, для класса.
источник

TL

Tab Loid in Saint P Ruby Community
A = Module.new
A::B = Module.new
C = A::B
C::D = Module.new
Какой родительский неймспейс у D?
источник

m

max in Saint P Ruby Community
это какая-то особая терминоголия, которую я не встречал в официальной документации... ну да ладно

я больше с этим утверждением не согласен:
> Потому что в руби нет namespace’ов.
потому что и официальных доках и во многих популярных книжках и гайдах термин namespace активно используется
источник

m

max in Saint P Ruby Community
Tab Loid
A = Module.new
A::B = Module.new
C = A::B
C::D = Module.new
Какой родительский неймспейс у D?
A = Module.new
A::B = Module.new
C = A::B
C::D = Module.new

p C::D.name
> "A::B::D"

ответ: A::B, ActiveSupport именно так считает
источник

TL

Tab Loid in Saint P Ruby Community
Чистый руби так же считает, но почему не C?
источник

CM

Cucumba Morozov in Saint P Ruby Community
max
это какая-то особая терминоголия, которую я не встречал в официальной документации... ну да ладно

я больше с этим утверждением не согласен:
> Потому что в руби нет namespace’ов.
потому что и официальных доках и во многих популярных книжках и гайдах термин namespace активно используется
в руби и о замыканиях говорят, но они в языке не выражены чем-то осязаемым
источник

CM

Cucumba Morozov in Saint P Ruby Community
неймспейсы есть в головах у пользователей
источник

m

max in Saint P Ruby Community
Cucumba Morozov
в руби и о замыканиях говорят, но они в языке не выражены чем-то осязаемым
простите, что?

a = 1
closure = ->(arg) { a = arg }

closure.call(3)

p a
> 3

можно еще книжку почитать: http://ruby-doc.com/docs/ProgrammingRuby/#UG

то что оно там через биндинг работает - это детали реализации и никого не интересует
источник