Ladění Se Pry
Přehled
pokryjeme Pry, typ REPL, a diskutovat o tom, jak nainstalovat a používat to, aby debuga program.
cíle
- vysvětlete, jak je Pry flexibilnější REPL než IRB.
- nainstalujte Pry do počítače (již nainstalovaný pro uživatele IDE).
- ladit program pomocí vazby.vypáčit v těle vašeho souboru.
co je REPL?
Již jste byli seznámeni s replikami pomocí IRB (Interactive Ruby).REPL znamená číst, Hodnotit, tisknout, smyčka. Jedná se o interaktivní programovací prostředí, které vezme vstup uživatele, vyhodnotí jej a vrátí výsledek uživateli.
Ruby nainstaluje s vlastním REPL, což je IRB, které jste již používali.Pokaždé, když do terminálu zadáte irb
, zadáváte REPL.
Co Je Pry?
Pry je další Ruby REPL s některými přidanými funkcemi. Když vstoupíte do IRB, vstoupíte do zcela nového interaktivního prostředí. Jakýkoli kód, který chcete hrát v IRB, musíte napsat do IRB nebo zkopírovat a vložit do IRB. Pry, na otherhand, je jako REPL, který můžete vložit do svého programu.
Pry je mnohem flexibilnější než IRB. Jakmile nainstalujete knihovnu Pry (přes Prygem-trochu projdeme instalací), můžete použít binding.pry
kdekoli ve vašem kódu.
počkejte… Co je „závazné“?
vazba je vestavěná třída ruby, jejíž objekty mohou zapouzdřit kontext aktuálního rozsahu (proměnné, metody atd.).), a ponechat je pro použití mimo tento kontext.
volání binding.pry
je v podstatě „zvědavost“ do aktuální vazby orcontext kódu, z vnějšku souboru.
takže když umístíte řádek binding.pry
do kódu, bude tento řádek getinterpreted za běhu (jak je váš program spuštěn). Když tlumočník hitsthat line, váš program bude skutečně zmrazit a váš terminál bude zase do REPL, že existuje právě v polovině svého programu, ať jste přidalibinding.pry
line.
pojďme se podívat. V tomto úložišti uvidíte soubor s názvempry_is_awesome.rb
.
instrukce část I
-
vidlice a klonovat toto úložiště.
-
nainstalujte Pry do počítače navigací do domovského adresáře (
cd ~
inyour terminal) a spusťtegem install pry
. (Nemusíte to dělat, pokud pracujete v IDE.) -
Podívejte se na kód v
lib/pry_is_awesome.rb
měli Byste vidět následující kód:
require 'pry'def prying_into_the_method inside_the_method = "We're inside the method" puts inside_the_method puts "We're about to stop because of pry!" binding.pry this_variable_hasnt_been_interpreted_yet = "The program froze before it could read me!" puts this_variable_hasnt_been_interpreted_yetendprying_into_the_method
jsme Tady vyžadující pry
, které musíte udělat, aby se používat pry, definující metodu,a pak volá tuto metodu.
v adresáři tohoto repo v terminálu spusťte soubor zadáním rubylib/pry_is_awesome.rb
. Podívejte se na terminál. Měl bys něco takového vidět.:
3: def prying_into_the_method 4: inside_the_method = "We're inside the method" 5: puts inside_the_method 6: puts "We're about to stop because of pry!" 7: binding.pry => 8: this_variable_hasnt_been_interpreted_yet = "The program froze before it could read me!" 9: puts this_variable_hasnt_been_interpreted_yet 10: end pry(main)>
zmrazili jste svůj program, jak se provádí, a nyní jste uvnitř REPL insideyour programu. V podstatě jste právě zastavili čas! Není to super?
v terminálu v páčivé konzole zadejte název proměnné inside_the_method
a stiskněte klávesu enter. Měli byste vidět návratovou hodnotu "We're inside the method"
jste schopni prozkoumat data uvnitř metody, ve které jste umístili yourbinding.
nyní v terminálu v páčivé konzoli zadejte název proměnnéthis_variable_hasnt_been_interpreted_yet
. Měli byste vidět návratovou hodnotunil
. To proto, že vazba, kterou jste umístili na linku 7, ve skutečnosti zmrazila program na lince 7 a proměnná, kterou jste právě volali, nebyla dosud interpretována.Proto o tom naši zastupitelé nevědí.
nyní v terminálu zadejte exit
a opustíte páčidlo a program bude pokračovat v provádění.
instrukce Část II: použití Pry k ladění
kromě zkoumání kódu uvnitř Pry můžete také manipulovat s variablesand vyzkoušet kód. To je místo, kde se Pry opravdu stává užitečným pro ladění. Pokud máte metodu, která nedělá to, co má dělat, místo toho tvorbyzměny v textovém editoru a testy znovu a znovu, až se dostanete itworking, můžete si dát závazné v kódu a vyzkoušet. Jakmile zjistíte, jak problém vyřešit, aktualizujete kód v textovém editorupodle toho.
pojďme společně projít příkladem. V tomto úložišti, které jste si naklonovali a naklonovali do počítače, uvidíte složku spec
obsahující souborpry_debugging_spec.rb
. Toto je test pro soubor lib/pry_debugging.rb
.
v pry_debugging.rb
máme zlomenou metodu. Spusťte learn test
a podívejte se na test failing. Měli byste vidět následující:
1) #plus_two takes in a number as an argument and returns the sum of that number and 2 Failure/Error: expect(plus_two(3)).to eq(5) expected: 5 got: 3 (compared using ==) # ./spec/pry_debugging_spec.rb:6:in `block (2 levels) in <top (required)>'
tak co se děje? Ve druhém řádku (řádek začínajícíFailure/Error
) vidíme, že test volá metodu plus_two
a prochází v 3
jako argument. Níže vidíme, že test očekává vrácení5
, ale místo toho se vrací 3
. Pamatujeme si, že hodnota metody v Ruby je obecně hodnota posledního řádku metody, v tomto případě num
:
def plus_two(num) num + 2 numend
takže zatímco naše metoda přidává 2 na num
na druhém řádku, zdá se, že to není aktualizace num
. V horní části našeho souboruspec/pry_debugging_spec.rb
jsme požadovali Pry, abychom jej mohli použít k ověření. Umístímebinding.pry
do našeho kódu, hned za tímto řádkem:
def plus_two(num) num + 2 binding.pry numend
Nyní spusťte testovací sadu znovu a pusťte se do konzoly Pry. Váš terminálby měl vypadat takto:
From: /Users/sophiedebenedetto/Desktop/Dev/Ruby-Methods_and_Variables/pry-readme/lib/pry_debugging.rb @ line 4 Object#plus_two: 1: def plus_two(num) 2: num + 2 3: binding.pry => 4: num 5: end pry(#<RSpec::ExampleGroups::PlusTwo>)>
zkontrolujme naši aktuální návratovou hodnotu zadáním num
na výzvu Pry. Měli byste vidět něco takového:
pry(#<RSpec::ExampleGroups::PlusTwo>)> num=> 3 pry(#<RSpec::ExampleGroups::PlusTwo>)>
kontrolou hodnoty proměnné uvnitř naší konzoly pry můžeme potvrdit, že num
je stále rovno 3
a v důsledku toho se metoda vrací 3
.
Jak můžeme upravit kód na řádku 2 tak, aby se metoda chová v expectedway? Musíme aktualizovat hodnotu naší proměnné num
tak, aby se rovnala součtu sebe sama a 2. Zahrajte si uvnitř konzole Pry: zkuste kód, který youthink podle potřeby aktualizuje num
, a poté zkontrolujte hodnotu num
, abyste zjistili, zda je topracoval. Jakmile to zjistíte, můžete zadat exit
v terminálu sundat Pry, aktualizovat kód v textovém editoru, a znovu spustit test ověřit’spassing. Nezapomeňte odstranit binding.pry
!
může chvíli trvat, než se dostanete na kloub používání Pry, takže se nebojte, pokud je to stále trochu matoucí. Jak začnete pracovat se složitějšími metodami ADATA struktury, zjistíte, že to může být velmi užitečný nástroj.