Re[3]: Metaprogramming et al: Ruby?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 18.10.05 13:22
Оценка: 33 (3)
Здравствуйте, eao197, Вы писали:

Не противопоставления ради, а для дополнения:

E>Единицы измерения


E>
E>event_queue "airspace" do
E>  generate_event_every 5.minutes + 26.seconds
E>  collision_radius 197.feet + 6.inches
E>end
E>


Algebra:
(2 * #orange) + (3 * #apple) "= 2orange+3apple"
0.65s * #US * 100 "= 65.00US"

Второй вариант: Measurements:
4 ~> 'kg'    "makes 4 kilograms"
5 as: 'cd.m/hr2'    "makes 5 meter-candelas per hour squared"
1 ~> 'm' ~> 'cm'    "makes 1 meter, and converts it into 100 centimeters"
4 mL "makes 4 milliliters"


E>

E>Генерация XML

E>
E>builder = SimpleBuilder.new
E>builder.entry { |x|
E>  x.name me.name
E>  x.email me.email
E>}
E>

E>результат
E>
E><entry><name>Jim</name><email>jim@fakemail.com</email></entry>
E>


VW ST:
aBuilder entry: [:entry |
    entry name: self name.
    entry email: [:email |
        item title: 'This is my email'.
        item description: 'This is the description of the e-mail']].


Такая метода — стандартный способ генерации XHTML в seaside.

E>

E>DSL вместо явного написания SQL

E>
E>route "Problems" do
E>  step "Problem Resolution"
E>end

E>route "EMail Order" do
E>  step "Validate Customer"
E>  step "Assemble Order"
E>  step "Charge Credit Card" do
E>    on "invalid", :route => "Problems", :step => "Problem Resolution"
E>  end
E>  step "Ship"
E>end
  
E>generate_sql
E>

E>вместо
E>
E>INSERT INTO queues(id, name) VALUES (1, 'Validate Customer');
E>INSERT INTO queues(id, name) VALUES (2, 'Validate Books');
E>INSERT INTO queues(id, name) VALUES (3, 'Charge Credit Card');
E>INSERT INTO queues(id, name) VALUES (4, 'Ship Order');
E>INSERT INTO queues(id, name) VALUES (5, 'Problem Resolution');

E>INSERT INTO routes(id, name) VALUES (1, 'EMail Book Orders');
E>INSERT INTO routes(id, name) VALUES (2, 'Problems');

E>INSERT INTO steps(id, route_id, queue_id) VALUES(1, 1, 1);
E>INSERT INTO steps(id, route_id, queue_id) VALUES(2, 1, 2);
E>INSERT INTO steps(id, route_id, queue_id) VALUES(3, 1, 3);
E>INSERT INTO steps(id, route_id, queue_id) VALUES(4, 1, 4);
E>INSERT INTO steps(id, route_id, queue_id) VALUES(5, 2, 5);

E>INSERT INTO alternatives(id, step_id, code, next_step_id)
E>  VALUES (1, 3, 'invalid', 5);
E>


ROE:
courseTitlesForProfessorNamed: aString
  |courses|
  courses := (professors * courses
       select: [[:ea | (ea lastName = aString) & (ea id = ea professorID)].
  ^ (courses project: #title) copyFrom: 1 to: 10.


SELECT title 
    FROM Professor, Course 
    WHERE Professor.lastName = 'Foo' AND Professor.id = Course.professorID LIMIT 10
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.