Лучший способ к абстрактным атрибутам инициализации

Если вы хотите переместить анимацию прокрутки в таблицу, используйте этот код. Прокрутка переместится наверх с анимацией за 0,5 секунды.

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

[_tableContent scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];

[UIView commitAnimations];
12
задан Yehuda Katz 3 July 2009 в 06:08
поделиться

4 ответа

Java - объектно-ориентированный язык, и весь смысл ORM заключается в том, чтобы скрыть от вас детали таблиц соединения и тому подобное. Следовательно, даже рассмотрение удаления из объединенной таблицы без учета последствий было бы странным.

Нет, вы не можете сделать это с JPQL, то есть для сущностей.

Извлеките сущности на обоих концах и очистите их коллекции. Это удалит записи объединяемых таблиц. Объектно-ориентированный.

но определение нового набора в дочернем классе удалит родительские атрибуты
  • Динамическое решение, вероятно, снизит производительность
  • Если вы хотите создать решение с абсолютно минимальными накладными расходами на производительность, было бы не так сложно провести рефакторинг большая часть функциональных возможностей в строку, которая может быть eval ed, когда определен инициализатор. Я не тестировал, какая будет разница.

    Примечание: я обнаружил, что взлом new работает лучше, чем взлом initialize . Если вы определите инициализировать с помощью метапрограммирования, вы, вероятно, получите сценарий, в котором вы передаете блок в initialize_with в качестве замещающего инициализатора, и невозможно использовать super ] в блоке.

    было бы не так сложно преобразовать большую часть функций в строку, которая может быть eval ed, когда определен инициализатор. Я не тестировал, в чем будет разница.

    Примечание: я обнаружил, что взлом new работает лучше, чем взлом initialize . Если вы определите initialize с помощью метапрограммирования, вы, вероятно, получите сценарий, в котором вы передаете блок в initialize_with в качестве замещающего инициализатора, и невозможно использовать super ] в блоке.

    было бы не так сложно преобразовать большую часть функций в строку, которая может быть eval ed, когда определен инициализатор. Я не тестировал, в чем будет разница.

    Примечание: я обнаружил, что взлом new работает лучше, чем взлом initialize . Если вы определите initialize с помощью метапрограммирования, вы, вероятно, получите сценарий, в котором вы передаете блок в initialize_with в качестве замещающего инициализатора, и невозможно использовать super ] в блоке.

    7
    ответ дан 2 December 2019 в 22:23
    поделиться

    Это первое решение, которое приходит мне в голову. В моем модуле есть один большой недостаток: вы должны определить метод инициализации класса перед включением модуля, иначе он не будет работать.

    Возможно, есть лучшее решение этой проблемы, но это то, что я написал менее чем за пару секунд. минут.

    Кроме того, я не уделял слишком много внимания выступлениям. Вы, наверное, найдете гораздо лучшее решение, чем я, особенно если говорить о выступлениях. ;)

    #!/usr/bin/env ruby -wKU
    
    require 'rubygems'
    require 'activesupport'
    
    
    module Initializable
    
      def self.included(base)
        base.class_eval do
          extend  ClassMethods
          include InstanceMethods
          alias_method_chain :initialize, :attributes
          class_inheritable_array :attr_initializable
        end
      end
    
      module ClassMethods
    
        def attr_initialized(*attrs)
          attrs.flatten.each do |attr|
            attr_accessor attr
          end
          self.attr_initializable = attrs.flatten
        end
    
      end
    
      module InstanceMethods
    
        def initialize_with_attributes(*args)
          values = args.dup
          self.attr_initializable.each do |attr|
            self.send(:"#{attr}=", values.shift)
          end
          initialize_without_attributes(values)
        end
    
      end
    
    end
    
    
    class MyClass1
      attr_accessor :foo, :bar
    
      def initialize(foo, bar)
        @foo, @bar = foo, bar
      end
    end
    
    class MyClass2
    
      def initialize(*args)
      end
    
      include Initializable
    
      attr_initialized :foo, :bar
    end
    
    
    if $0 == __FILE__
      require 'test/unit'
    
      class InitializableTest < Test::Unit::TestCase
    
        def test_equality
          assert_equal MyClass1.new("foo1", "bar1").foo, MyClass2.new("foo1", "bar1").foo
          assert_equal MyClass1.new("foo1", "bar1").bar, MyClass2.new("foo1", "bar1").bar
        end
    
      end
    end
    
    1
    ответ дан 2 December 2019 в 22:23
    поделиться
    class MyClass < Struct.new(:foo, :bar)
    end
    
    1
    ответ дан 2 December 2019 в 22:23
    поделиться

    Этот модуль позволяет использовать хэш attrs в качестве опции для new (). Вы можете включить модуль в класс с наследованием, и конструктор по-прежнему работает.

    Мне это нравится больше, чем список значений attr в качестве параметров, потому что, особенно с унаследованными атрибутами, я не хотел бы пытаться вспомнить, какой параметр был какой.

    module Attrize
      def initialize(*args)
        arg = args.select{|a| a.is_a?(Hash) && a[:attrs]}
        if arg
          arg[0][:attrs].each do |key, value|
            self.class.class_eval{attr_accessor(key)} unless respond_to?(key)
            send(key.to_s + '=', value)
          end
          args.delete(arg[0])
        end
        (args == []) ? super : super(*args)
      end
    end
    
    class Hue
      def initialize(transparent)
        puts "I'm transparent" if transparent
      end
    end
    
    class Color < Hue
      include Attrize
      def initialize(color, *args)
        p color
        super(*args)
        p "My style is " + @style if @style
      end
    end
    

    И вы можете сделать это:

    irb(main):001:0> require 'attrize'
    => true
    irb(main):002:0> c = Color.new("blue", false)
    "blue"
    => #<Color:0x201df4>
    irb(main):003:0>  c = Color.new("blue", true, :attrs => {:style => 'electric'})
    "blue"
    I'm transparent
    "My style is electric"
    
    0
    ответ дан 2 December 2019 в 22:23
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: