/ / Jak zmienić pełny kod w Ruby na prostszy kod za pomocą Metaprogramowania? - ruby, metaprogramowanie

Jak zmienić szczegółowy kod w języku Ruby na prostszy kod za pomocą metaprogramowania? - ruby, metaprogramming

Mówi się, że Ruby jest językiem metaprogramowania. Zastanawiam się, czy pierwsze 3 wiersze można zmniejszyć, używając metaprogramowania?

RUBY_VERSION ||= "unknown version"
RUBY_PATCHLEVEL ||= "unknown patchlevel"
RUBY_PLATFORM ||= "unknown platform"

print "Ruby ", RUBY_VERSION, " patch ", RUBY_PATCHLEVEL, " on ", RUBY_PLATFORM

Odpowiedzi:

3 dla odpowiedzi № 1

To działa:

%w{version patchlevel platform}.each{|v| eval "RUBY_#{v.upcase} ||= "unknown #{v}""}

ale myślę, że jest nieprzejrzysty i nieprzyjemny. Myślę, że twoja oryginalna wersja jest znacznie lepsza. W szczególności, myślę ||= ze stałymi i tak nie jest świetne (ponieważ stałe nie powinny być dynamiczne), i to za pomocą eval ze stałymi nie jest standardem i dlatego jest oczekiwany. Łączenie przypisania warunkowego, stałych i ewaluacji razem jest, moim zdaniem, złym połączeniem.


0 dla odpowiedzi nr 2

Myślę, że nie powinieneś zmieniać wartości stałych. Zamiast tego spróbuj:

puts "Ruby #{RUBY_VERSION || "unknown version"}" # ...

Ponadto, używając gadżetów Rails, możesz ulepszyć rozwiązanie Petera, dzwoniąc

"RUBY_#{v}".constantize

zamiast brudnych eval ;-)