Все вопросы: [monkeypatching]
42 вопросов
Можно ли переопределить реверс в проекте Django?
У меня есть некоторая настраиваемая логика, которая должна выполняться каждый раз при изменении URL-адреса, даже для сторонних приложений. Мой проект - это мультитенантное веб-приложение, и клиент определяется по URL-адресу. Не существует ни одного действительного URL-адреса, не содержащего иден...
Можно ли использовать псевдонимы операторов Ruby?
Мне интересно, как можно заставить это работать: me = "this is a string" class << me alias :old<< :<< def <<(text) old<<(text) puts "appended #{text}" end end Я бы хотел, чтобы при добавлении чего-либо к переменной me объект использовал переопре...
Extending uniq method
This is Ruby 1.8 Question: We all know how to use Array#uniq : [1,2,3,1].uniq #=> [1,2,3] However I'm wondering if we can monkey patch it in a way to work with complex objects. The current behavior is like this: [{"three"=>"3"}, {"three"=>"4"}, {"three"=>"3"}].uniq #=> [{"thr...
Is it possible to divert a module in python? (ResourceX diverted to ResourceXSimulated)
I want to simulate MyApp that imports a module (ResourceX) which requires a resource that is not available at the time and will not work. A solution for this is to make and import a mock module of ResourceX (named ResourceXSimulated) and divert it to MyApp as ResourceX. I want to do this in ord...
Django and monkey patching issue
I have recently started experimenting with Django for some web applications in my spare time. While designing the data model for one, I came across the dilemma of using inheritance to define a user of the website or using a technique known as monkey patching with the User class already supplied b...
How to add property to a class dynamically?
The goal is to create a mock class which behaves like a db resultset. So for example, if a database query returns, using a dict expression, {'ab':100, 'cd':200}, then I would like to see: >>> dummy.ab 100 At first I thought maybe I could do it this way: ks = ['ab', 'cd'] vs = [12, ...
Patch a Ruby Gem
What is the best way to apply a simple patch to a Ruby gem in a Rails app? Is it possible to keep the original gem code untouched?
How do I get Rails to stop re-loading my gems?
I have a gem: # in /Library/Ruby/Gems/1.8/gems/my_gem-1.0.0/lib/my_gem.rb module MyGem def do_stuff .. end end And I loaded it in Rails: # in [rails_root]/config/environment.rb: config.gem 'my_gem', :version => '1.0.0' And used it: # in [rails_root]/app/controllers/application_c...
Переопределение методов базового класса в контроллере
Я пытаюсь обмануть очень сложный черный ящик, чтобы он отображал некоторые поплавки по-другому (это графическая библиотека Gruff, поэтому она отображается в изображение). В консоли я могу вставить это: logger = RAILS_DEFAULT_LOGGER logger.debug "Here's a float #{455.67.to_s}" eval ...
Добавьте функциональность в Django FlatPages без изменения исходного приложения Django
Я хотел бы добавить поле в модель базы данных Django FlatPage, но я действительно не знаю, как расширить его, не редактируя исходное приложение. Я хочу добавить в модель следующее поле: from django.db import models from django.contrib.flatpages.models import FlatPage as FlatPageOld class...
Повторно объявить классы .net в IronPython
Может ли кто-нибудь сказать мне, можно ли повторно объявить класс C # в IronPython? Если у меня есть класс C #, смогу ли я исправить его с помощью IronPython?
Исправление классов в Python
Предположим, у меня есть класс Python, к которому я хочу добавить дополнительное свойство. Есть ли разница между import path.MyClass MyClass.foo = bar и используя что-то вроде: import path.MyClass setattr(MyClass, 'foo', bar) ? Если нет, то почему люди делают второе, а не перв...
Как Smalltalk справляется с отслеживанием обезьян?
Я программист на Ruby. Для меня monkeypatching - это изменение во время выполнения методов классов или модулей во внешнем проекте. Что меня интересует, так это то, какой у вас механизм, который защитит вас от некоторых злоупотреблений этой замечательной функцией. Далее следует несколько сценарие...
Как вы можете повлиять на последовательность загрузки кода Ruby?
Допустим, ваш коллега-обезьяна исправляет класс Fixnum и переопределяет метод + для вычитания вместо добавления: class Fixnum def +(x) self - x end end >> 5 + 3 => 2 Ваша проблема в том, что вы хотите получить доступ к исходным функциям метода +. Таким образом, вы вставл...
Как сделать на Ruby безопасный и обратно совместимый «reverse-monkeypatch»?
Если ваш коллега «открывает» («обезьяны») класс в Ruby и переопределяет некоторые важные функции, которые вам нужно использовать, как вы получите доступ к этой исходной предварительно исправленной функциональности, не нарушая систему, которая уже полагается / имеет зависимости от его обезьяньи о...
Как в Django изменить класс User для работы с другой таблицей db?
Мы запускаем django вместе с существующим приложением и совместно используем базу данных. И мы хотим использовать существующую «пользовательскую» таблицу (а не собственную Django) для хранения информации о пользователях. Похоже, что можно изменить имя таблицы, которую использует Django, в кла...
PowerShell, методы расширения и исправление обезьян
Можно ли написать метод расширения в PowerShell? или закрепить новый метод поверх существующего типа, например [string] live во время выполнения?
Есть ли способ изменить значение поля private static final в Java извне класса?
Я знаю, что это обычно довольно глупо, но не стреляйте в меня, пока не прочитаете вопрос. Обещаю, у меня есть веская причина для этого :) Можно изменить обычные частные поля в Java с помощью отражения, однако Java выдает исключение безопасности при попытке сделать то же самое для полей final....
фиксированные и простые числа в рубине
Прежде чем я сам приступил к написанию этого, видел ли кто-нибудь рубиновую реализацию следующего поведения? puts 7.nextprime(); #=> 11 puts 7.previousprime(); #=> 5 puts 7.isprime(); #=> true Очевидно, что такие вещи были бы некрасивыми для больших чисел, но для целы...
Если исправление обезьян разрешено и в Ruby, и в Python, почему в Ruby это вызывает больше споров?
Во многих обсуждениях, которые я слышал о Ruby, люди выражали свои сомнения по поводу языка, проблема обезьяньих исправлений поднималась как одна из их основных проблем. Однако я редко слышу такие же аргументы в контексте Python, хотя это также разрешено в языке Python. Почему это различие...
Ищете конкретный пример того, что не так с исправлением обезьян?
Я слышал много ох и ах о том, что исправление обезьян - это так здорово или что исправление обезьян - самое худшее на земле. У меня есть идея, что нехорошо, если вы напишете какой-то код, а затем кто-то другой изменит его функциональность, чтобы сделать что-то еще. Но я ищу конкретный пример сит...
Альтернативы базовым классам обезьяны исправления
Я все еще новичок в Ruby и в основном только пишу свою первую микропрограмму после прочтения книги Купера. Мне указали, что нужно избегать исправления обезьян, но проблема в том, что я не знаю, каковы альтернативы для достижения такого же поведения. По сути, я хочу добавить новый метод, доступны...
Как мне получить доступ к исходному методу обезьяньего метода в Perl?
Я пытаюсь обезьяны исправлять класс Perl: я хочу изменить поведение существующего метода. Этот узел на perlmonks показывает, как добавить функцию существующего класса. Я обнаружил, что этот шаблон также можно использовать для создания новой реализации существующей функции. Однако я х...
Действительно ли исправление / повторное открытие класса обезьяны является примером отражения?
Приносим извинения за рекурсивный характер этого вопроса, но выбранный ответ на вопрос о SO заставил меня усомниться в моем понимании рефлексии. Я думал, что рефлексия в основном связана с запросом внутренних событий программы во время ее работы. В примере, приведенном в этом ответе, исправ...
Можно ли заменить PHP-функции (monkeypatch)?
Вы можете сделать это в Python, но возможно ли это в PHP? >>> def a(): print 1 ... >>> def a(): print 2 ... >>> a() 2 например: <? function var_dump() {} ?> Fatal error: Cannot redeclare var_dump() in /tmp/- on line 1
Позволяет ли Perl monkey-patching видеть объем исправленного пакета?
Я, как обезьяна, исправляю пакет, используя методику, приведенную в начале " Как обезьяно исправить метод экземпляра в Perl? ". Проблема, с которой я сталкиваюсь, заключается в том, что исходная подпрограмма использовала переменную my уровня пакета, к которой исправленная подпрограмма, похоже, н...
Как я могу исправить метод экземпляра в Perl?
Я пытаюсь обезьяно-патчить (утиный удар :-) экземпляр LWP::UserAgent, вот так: sub _user_agent_get_basic_credentials_patch { return ($username, $password); } my $agent = LWP::UserAgent->new(); $agent->get_basic_credentials = _user_agent_get_basic_credentials_patch; Это неправильн...
Синхронизация пользователей Django с Google Apps без monkeypatching
Я пишу приложение Django и хочу, чтобы учетная запись создавалась в нашей электронной почте, размещенной в Google Apps, с использованием Provisioning API всякий раз, когда учетная запись создается локально. Я бы использовал только сигналы, но поскольку я хотел бы, чтобы пароли синхронизировал...
Обезьяна-патч или нет?
Это более общий вопрос, чем вопрос для конкретного языка, хотя я столкнулся с этой проблемой во время игры с модулем python ncurses. Мне нужно было отображать символы локали и распознавать их как символы, поэтому я просто быстро исправил несколько функций / методов из модуля curses. Это было ...
[] метод Ruby String
Когда я читал исходный код Beast, я обнаружил много такого кода: <%= 'Password'[:password_title] %> Мне кажется, что это вызов метода [] с символом в качестве входного параметра для String, но я не нашел такого типа параметра метода String [] в ruby API. Что это значит? заранее сп...