def funkcja
XXX
end
puts "Lorem ipsum"
funkcja
czy jest instrukcja odpowiadająca za to, żeby funkcja “funkcja” wykonała poprzednią instrukcję, czyli w tym wypadku ponownie wyświetliła “Lorem ipsum”?
Potrzebny mi jest taki właśnie myk. W uproszczeniu działam tak, że funkcja “funkcja” czyści konsolę, a następnie wypisuje coś swojego. Ale chcę, żeby pomimo wyczyszczenia konsoli widniał ten napis “Lorem ipsum” na samej górze. “Funkcja” jest używana w skrypcie wielokrotnie i nie mogę przewidzieć co się znajdzie przed nią.
Teoretycznie mogę jej przekazywać parametr do wyświetlenia, jednakże nie chcę powtarzać kodu. No chyba, że:
def funkcja(string)
puts string
x = gets
system('cls')
puts string
puts "something"
end
funkcja "Lorem ipsum"
ale wolałbym (a nawet potrzebuję) rozwiązanie z wykonywaniem poprzedniej instrukcji
Wszystko zależy od tego czy Ty kontrolujesz ten kod, który jest przed wywołaniem “funkcja”. Jeżeli tak, to ja bym zrobił coś w stylu:
[code]class OutputRecorder
attr_reader :records
def initialize @records = []
end
def puts(*args)
records << args
Kernel.puts *args
end
end
out = OutputRecorder.new
out.puts “Lorem ipsum”
funkcja(out)[/code]
Ten kod poniżej OutputRecorder pewnie powinien być w jakiejś klasie, ale nie wiem do końca co chcesz zrobić, więc podaję w takiej formie.
[code]def show
puts “Lorem ipsum”
end
def clean
x = gets
system(‘cls’)
puts x
end
show
clean[/code]
I w tym momencie owszem, jest wyświetlona zmienna x, ale ja chcę żeby pomimo wyczyszczenia konsoli nadal widniało Lorem Ipsum. Oczywiście mam wiele różnych “show” (show1, show2, show3, show4), które wyświetlają różne napisy. Nie byłoby problemu, gdyby show miało “return”, a nie “puts”. Nie chcę już zmieniać koncepcji. Chyba że do show dam i “puts” i “return”, a potem tylko
clean(show)
Zobaczę czy zadziała.
Okej działa taka metoda. Może nie do końca właściwa, ale działa ^^ Jakbyście mieli lepsze propozycje to możecie napisać, będę tu jeszcze zaglądał przez pewien czas.