module M
A = 'm'
end
module Namespace
A = 'ns'
class C
include M
puts A
end
end
Выведет ns. Если бы Вы внимательно прочитали пост, то знали бы это ;)
Опять же, не используйте слово "переопределит". В английском языке это называется, если не ошибаюсь, "shadowing", т.е. они могут "перекрывать" друг друга. Константы Namespace::A и M::A друг другу не мешают. Вопрос в том, на какую из них будет ссылаться просто A
Т.е. вы считаете, что нужно изучать перл?:)
У меня для вас плохие новости: не нужно.
При чем здесь cat? При том, что я привел пример вывода текста? Во-первых, это было просто ради того, чтобы показать работу параметров ruby, во-вторых, эту задачу невозможно решить только с помощью cat. Ну и вообще попахивает неуместной желчью.
find? видел. Использовал. Не использую.
Еще раз: с какой стати я буду вспоминать, как использовать авк, если я могу написать все прямо здесь и сейчас? Вы предлагаете мне построить магистраль, когда рядом есть тропа, по которой мне пройти нужно всего раз.
И я с недоверием отношусь к аргументации вида "если вам придется". Для меня это не аргумент. Человек для себя сам расставляет приоритеты.
Летая на Камчатку я рискую потерпеть крушение где-нибудь в горах. Однако это для меня не повод изучать основы выживания в дикой природе.
Тут главное не перегнуть. Изучение awk/sed — это явный оверхед.
P.S. Я, кстати, изучал awk и даже использовал. Вот только спустя какое-то время знания уходят.
Зачем что-то делать, если можно этого не делать?:)
Нужно стараться сбалансировать изучаемую информацию. Я вот не хочу потратить на изучение чего-то полдня, чтобы потом все забыть и при надобности читать заново.
Ruby я пользуюсь постоянно и забыть я ничего не могу. Логично, что если мне нужно выполнить какую-то мелкую задачу, я воспользуюсь им и получу результат мгновенно, а не буду курить маны весь день, чтобы одну строчку написать
Просто все эти разговоры про "программисту не нужно образование" имеют смысл лишь в плоскости "конвейерных" вакансий, не требующих большого ума. Увы, программисты не являются интеллектуальной элитой, как бы некоторые личности не кичились своей профессией
С таким же успехом можно сказать, что среднему педиатру образование не нужно, т.к. он может с коллегой посидеть и основные симптомы, методы лечения, направления запомнить на практике.
(возможно, неудачный пример)
Тезис: образование дает намного более широкий угол зрения.
Современная тенденция, говорящая, что образование не нужно, просто основана на том, что разработка превратилась в ремесленную работу: возьми это — сделай то.
Большинство текущих вакансий на рынке — полнейший шлак, не требующий большого ума, но требующий знания технологий, которые в вузе не преподают.
Вы без образования?
Ну-ка, сможете ли Вы решить задачу. В грубой форме она звучит так:
придумать алгоритм для нахождения N-ого числа Фиббоначи, быстрее классического O(N)
Я не буду описывать решение (которое я сам не смогу с ходу написать), напишу только следующее:
спойлер
Нужна линейная алгебра. С помощью матрицы 2х2 и операции перемножения матриц можно вычислить N-ое число Фиббоначи гораздо быстрее линейного алгоритма.
Человек без образования ее вряд ли решит, т.к. маловероятно, что человек будет просто так сидеть и читать про линейную алгебру (есть исключения, ес-но).
Теперь отойдем от данной задачи.
Я могу задать гуглу вопрос: линейная алгебра матрицы перемножение.
Но знание вопроса — это уже половина ответа. Как Вы будете знать, какой вопрос задать?
Образование дает обрывки знаний, о которых человек сможет вспомнить в разнообразных ситуациях, чтобы задать правильный вопрос гуглу.
Если я не слышал о преобразованиях Фурье и не имею малейшего представления (я действительно не имею) о том, что это, то каким, черт побери, образом я узнаю, что мне нужно загуглить их, т.к. они мне пригодятся в данной задаче?
Я вам привел две строчки для сравнения:)
Это просто делает код красивее.
Что является антипаттерном? Приемы, которые нанесут вред коду? Какой вред вы видете в глобальной константе, содержащей stateless-объект с нужными методами?
Ну и еще можно, конечно, говорить о том, что это избавляет от множеств созданий/уничтожений объекта и т.д. и т.п., но это роли не играет, разумеется.
P.S. мне нравится этот диалог, но, по-моему, мы совсем уж ушли от изначальной темы про способы создания синглтонов в Ruby (на котором Вы не пишете).
UPD. Вы упомянули статические методы. Класс в данном случае ведь тоже объект. Просто в питоне и джаве это не подтверждается на уровне языка. Я могу ошибаться, но в ООП нет "статических методов". Есть только объекты и их методы. Соответственно, говоря о статических методах, мы начинаем интерпретировать класс как самостоятельный объект (в Ruby так оно и есть)
Этот способ указан в посте. С парой причин, почему он лично мне не нравится.
тащить в другой язык инородные приемы и парадигмы — напрасная трата сил
В руби шикарно уживаются приемы из ФП. Более того, о каких приемах в контексте данного поста идет речь?
Синглтон — всего лишь название, чтобы всем было понятно, что речь идет о единственном представителе своего класса.
Например, как я указал в посте, в приеме, который мне нравится больше всего, есть проблема, связанная с тем, что другие инстансы создать можно. Но на самом деле это не проблема, т.к. даже если инстансы появятся, это никакого вреда не принесет, т.к. синглтон в руби во многих (если не во всех) случаях нужен просто для красоты.
Вы забываете, что синглтон в Руби — это еще и способ красиво оформить код. Я, например, пока и сам не попадал в ситуации, где использование синглтона было бы продиктовано архитектурными соображениями.
Мне вот, допустим, не нравится видеть new каждый раз, когда я хочу воспользоваться чем-то вроде SomeExternalApi:
SomeApi.new.do_something
# vs
SomeApi.do_something
Синглтон — это не паттерн N из книги банды четырех. Это просто идея (впрочем, как и большинство паттернов). Далеко не всегда они решают какую-то архитектурную задачу, зачастую они просто позволяют сделать код красивее (понятнее).
Предвижу минусы, но я настаиваю на этой точке зрения.
Выведет
ns
. Если бы Вы внимательно прочитали пост, то знали бы это ;)Опять же, не используйте слово "переопределит". В английском языке это называется, если не ошибаюсь, "shadowing", т.е. они могут "перекрывать" друг друга. Константы
Namespace::A
иM::A
друг другу не мешают. Вопрос в том, на какую из них будет ссылаться простоA
deleted
ни о каком переопределении речь не идет. Где Вы это в посте увидели?
Речь идет о коллизии имен, которая происходит потому, что в Ruby не обязательно указывать полный путь до константы.
Милый пост.
Спасибо за перевод!
P.S. и добро пожаловать на хабрахабр;D (песочница)
А еще я ненавижу маркдаун хабра (хабрдаун? О__О), который заставляет меня удалять переносы строк :(
я прекращаю отвечать на ваши комментарии. Они, на мой взгляд, не несут смысловой нагрузки. Это больше похоже на троллинг с хождением по кругу
Т.е. вы считаете, что нужно изучать перл?:)
У меня для вас плохие новости: не нужно.
При чем здесь
cat
? При том, что я привел пример вывода текста? Во-первых, это было просто ради того, чтобы показать работу параметровruby
, во-вторых, эту задачу невозможно решить только с помощьюcat
. Ну и вообще попахивает неуместной желчью.find? видел. Использовал. Не использую.
Еще раз: с какой стати я буду вспоминать, как использовать авк, если я могу написать все прямо здесь и сейчас? Вы предлагаете мне построить магистраль, когда рядом есть тропа, по которой мне пройти нужно всего раз.
perl тоже есть практически везде.
И я с недоверием отношусь к аргументации вида "если вам придется". Для меня это не аргумент. Человек для себя сам расставляет приоритеты.
Летая на Камчатку я рискую потерпеть крушение где-нибудь в горах. Однако это для меня не повод изучать основы выживания в дикой природе.
Тут главное не перегнуть. Изучение awk/sed — это явный оверхед.
P.S. Я, кстати, изучал awk и даже использовал. Вот только спустя какое-то время знания уходят.
Не особо понимаю, как коррелируют изучение основ ОС *nix с изучением awk/sed.
Именно так! В этом и суть: для мелких задач, когда изучение proper tools — это оверхед
Зачем что-то делать, если можно этого не делать?:)
Нужно стараться сбалансировать изучаемую информацию. Я вот не хочу потратить на изучение чего-то полдня, чтобы потом все забыть и при надобности читать заново.
Ruby я пользуюсь постоянно и забыть я ничего не могу. Логично, что если мне нужно выполнить какую-то мелкую задачу, я воспользуюсь им и получу результат мгновенно, а не буду курить маны весь день, чтобы одну строчку написать
Таким вакансиям и средне-специальное не нужно.
Просто все эти разговоры про "программисту не нужно образование" имеют смысл лишь в плоскости "конвейерных" вакансий, не требующих большого ума. Увы, программисты не являются интеллектуальной элитой, как бы некоторые личности не кичились своей профессией
С таким же успехом можно сказать, что среднему педиатру образование не нужно, т.к. он может с коллегой посидеть и основные симптомы, методы лечения, направления запомнить на практике.
(возможно, неудачный пример)
Тезис: образование дает намного более широкий угол зрения.
Современная тенденция, говорящая, что образование не нужно, просто основана на том, что разработка превратилась в ремесленную работу: возьми это — сделай то.
Большинство текущих вакансий на рынке — полнейший шлак, не требующий большого ума, но требующий знания технологий, которые в вузе не преподают.
Вы без образования?
Ну-ка, сможете ли Вы решить задачу. В грубой форме она звучит так:
придумать алгоритм для нахождения N-ого числа Фиббоначи, быстрее классического O(N)
Я не буду описывать решение (которое я сам не смогу с ходу написать), напишу только следующее:
Нужна линейная алгебра. С помощью матрицы 2х2 и операции перемножения матриц можно вычислить N-ое число Фиббоначи гораздо быстрее линейного алгоритма.
Человек без образования ее вряд ли решит, т.к. маловероятно, что человек будет просто так сидеть и читать про линейную алгебру (есть исключения, ес-но).
Теперь отойдем от данной задачи.
Я могу задать гуглу вопрос: линейная алгебра матрицы перемножение.
Но знание вопроса — это уже половина ответа. Как Вы будете знать, какой вопрос задать?
Образование дает обрывки знаний, о которых человек сможет вспомнить в разнообразных ситуациях, чтобы задать правильный вопрос гуглу.
Если я не слышал о преобразованиях Фурье и не имею малейшего представления (я действительно не имею) о том, что это, то каким, черт побери, образом я узнаю, что мне нужно загуглить их, т.к. они мне пригодятся в данной задаче?
Не понравился первый же пункт:
Если Вы самоучка, каким образом Вы можете знать, лучше или не лучше?
Я понял, что Вы имели в виду, но все-таки подбирайте слова, пожалуйста;)
Уточнил. Я не прав насчет питона. В питоне классы — тоже объекты, что просто замечательно
Я вам привел две строчки для сравнения:)
Это просто делает код красивее.
Что является антипаттерном? Приемы, которые нанесут вред коду? Какой вред вы видете в глобальной константе, содержащей stateless-объект с нужными методами?
Ну и еще можно, конечно, говорить о том, что это избавляет от множеств созданий/уничтожений объекта и т.д. и т.п., но это роли не играет, разумеется.
P.S. мне нравится этот диалог, но, по-моему, мы совсем уж ушли от изначальной темы про способы создания синглтонов в Ruby (на котором Вы не пишете).
UPD. Вы упомянули статические методы. Класс в данном случае ведь тоже объект. Просто в питоне и джаве это не подтверждается на уровне языка. Я могу ошибаться, но в ООП нет "статических методов". Есть только объекты и их методы. Соответственно, говоря о статических методах, мы начинаем интерпретировать класс как самостоятельный объект (в Ruby так оно и есть)
Этот способ указан в посте. С парой причин, почему он лично мне не нравится.
В руби шикарно уживаются приемы из ФП. Более того, о каких приемах в контексте данного поста идет речь?
Синглтон — всего лишь название, чтобы всем было понятно, что речь идет о единственном представителе своего класса.
Например, как я указал в посте, в приеме, который мне нравится больше всего, есть проблема, связанная с тем, что другие инстансы создать можно. Но на самом деле это не проблема, т.к. даже если инстансы появятся, это никакого вреда не принесет, т.к. синглтон в руби во многих (если не во всех) случаях нужен просто для красоты.
Вы забываете, что синглтон в Руби — это еще и способ красиво оформить код. Я, например, пока и сам не попадал в ситуации, где использование синглтона было бы продиктовано архитектурными соображениями.
Мне вот, допустим, не нравится видеть
new
каждый раз, когда я хочу воспользоваться чем-то вродеSomeExternalApi
:Синглтон — это не паттерн N из книги банды четырех. Это просто идея (впрочем, как и большинство паттернов). Далеко не всегда они решают какую-то архитектурную задачу, зачастую они просто позволяют сделать код красивее (понятнее).
Предвижу минусы, но я настаиваю на этой точке зрения.
Тоже крайне удивлен результатами опроса. Может быть, это джависты портят статистику? Хммм....