Możesz osiągnąć pożądaną suszę, tworząc funkcję "curried" (tj. Proc, która zwraca Proc), gdzie funkcja wewnętrzna zawiera łańcuch bazowy ze zmiennymi dla każdej części, która się różni.
Popraw mnie jeśli się mylę, ale w kodzie za swoim komentarzem linku, jedyną różnicą pomiędzy tymi dwoma strunami jest pojedynczy znak na końcu. (Nawet jeśli nie jest, nadal możesz użyć tej techniki, aby osiągnąć ten sam cel.) Możesz utworzyć Proc, który zwraca Proca, która zawiera twój ciąg, następnie wywołaj zewnętrzną Proc dwa razy dla twoich dwóch znaków kończących:
rails_root = "whatever" # Not variant for the string
rails_env_prompt = "whatever" #not variant for the string
spec = Proc.new { |tail_char|
Proc.new {|obj, nest_level, *|
"#{rails_root} #{rails_env_prompt} #{obj}:#{nest_level}#{tail_char} "
}
}
Pry.config.prompt = [ spec.call(">"), spec.call("*") ]
Pry.config.prompt[0].call("My obj", "My Nest Level")
# result: "whatever whatever My obj:My Nest Level> "
Co jest w przypadku użycia do tego? To brzmi jak bardzo dziwna rzecz do zrobienia. –
Tak ... jestem znany moich bizzare potrzeb. Dla tych dwóch linii jest bardziej DRY https://github.com/pjg/dotfiles/blob/5ae2e0c5a80be8b31d729d0739eb667fa99e5212/.pryrc#L46 –
Myślę, że coś takiego istnieje w Ruby Facets. –