2012-03-09 4 views
1

Как удалить несколько ссылок на инструкцию property в моем классе Link? Я сделал что-то подобное с require заявление для драгоценных камней сRuby Abstracting Model Statement

require 'sinatra' 
require 'data_mapper' 
require 'shotgun' 

становится ..

%w{sinatra data_mapper shotgun}.each { |lib| require lib}

 %w{sinatra data_mapper shotgun}.each { |lib| require lib} 
     DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/mini.db") 
     class Link 
      include DataMapper::Resource 
      property :id, Serial 
      property :title, Text, :required => true 
      property :url, String, :required => true 
      property :points, Integer, :default => 0 
     end 
     DataMapper.auto_upgrade! 

ответ

1

Часть того, чтобы быть хорошим разработчиком знать, когда не пытаться уменьшить дублирование. С технической точки зрения наличие нескольких операторов property является формой дублирования, но это настолько безобидно, что не стоит тратить время на удаление. Это особенно верно, если учитывать это в свете предлагаемого здесь альтернативного подхода, который я считаю запутанным и трудным для чтения.

В конечном счете это ненужная идиома, которая сделает ваш код сложнее в обслуживании. Заявления property следует оставить в покое, и я советую вам не придерживаться другого подхода.

Если вы абсолютно необходимо сделать это по какой-то причине, вы можете использовать:

[ 
    [:id, Serial], 
    [:title, Text, :required => true], 
    [:url, String, :required => true], 
    [:points, Integer, :default => 0] 
].each { |args| property *args } 
+0

Я полностью согласен. Это было вызвано любопытством и моей попыткой уменьшить применение reddit до нескольких строк. Я раньше не знал, как использовать '* args'. Благодаря! – Dru