{"id":81002,"date":"2024-10-22T01:06:09","date_gmt":"2024-10-21T21:36:09","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/a-repl-for-fat-finger-friendly-typing-pc8\/"},"modified":"2024-10-22T01:06:09","modified_gmt":"2024-10-21T21:36:09","slug":"a-repl-for-fat-finger-friendly-typing-pc8","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/a-repl-for-fat-finger-friendly-typing-pc8\/","title":{"rendered":"\u06cc\u06a9 REPL \u0628\u0631\u0627\u06cc \u062a\u0627\u06cc\u067e \u062f\u0648\u0633\u062a\u0627\u0646\u0647 \u0628\u0627 \u0686\u0627\u0642"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            \u0645\u0641\u0633\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0645\u0646\u060c \u0645\u0645\u0641\u06cc\u0633\u060c \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 REPL (\u062d\u0644\u0642\u0647 \u062e\u0648\u0627\u0646\u062f\u0646-\u0627\u06cc\u0648\u0627\u0644-\u0686\u0627\u067e) \u0627\u0633\u062a!<\/p>\n<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u062e\u0628\u0631 \u0642\u062f\u06cc\u0645\u06cc \u0627\u0633\u062a. \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u062c\u063a\u062f \u067e\u06cc\u0631 \u062f\u0627\u0646\u0627 \u0647\u06cc\u0686 \u0627\u0634\u062a\u0628\u0627\u0647\u06cc \u0645\u0631\u062a\u06a9\u0628 \u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u062f\u0644\u062e\u0648\u0627\u0647 \u062a\u0641\u0633\u06cc\u0631 \u06a9\u0646\u06cc\u062f. \u0628\u0627 \u0641\u0631\u0636 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631\u06af\u0632 \u0646\u062e\u0648\u0627\u0633\u062a\u06cc\u062f \u06cc\u06a9 \u0639\u0628\u0627\u0631\u062a \u0631\u0627 \u062f\u0648 \u0628\u0627\u0631 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f\u060c \u06cc\u0627 \u0627\u06af\u0631 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u06a9\u0631\u062f\u06cc\u062f\u060c \u0628\u062f\u062a\u0627\u0646 \u0646\u0645\u06cc \u0622\u0645\u062f \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0627\u06cc\u067e \u06a9\u0646\u06cc\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627 \u0635\u0641\u0631 \u0627\u0634\u062a\u0628\u0627\u0647.<\/p>\n<p>\u0645\u0646 \u0627\u0632 \u0627\u06cc\u0646 REPL \u06a9\u0627\u0645\u0644\u0627 \u0631\u0627\u0636\u06cc \u0628\u0648\u062f\u0645. \u062d\u062a\u06cc \u0647\u06cc\u062c\u0627\u0646 \u0632\u062f\u0647 \u0645\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646 REPL \u0628\u0647 \u062e\u0627\u0646\u0647 \u0646\u0648\u0634\u062a\u0647 \u0628\u0648\u062f\u0645. \u0627\u0645\u0627 \u0631\u0626\u06cc\u0633 \u0631\u0626\u06cc\u0633\u0627\u0646 \u0645\u0646 \u0627\u0632 \u0645\u0627 \u062e\u0648\u0627\u0633\u062a \u06a9\u0647 REPL \u0631\u0627 \u0628\u0631\u0627\u06cc \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0645\u0631\u062f\u0645 \u0628\u0647\u0628\u0648\u062f \u062f\u0647\u06cc\u0645. \u0622\u0646\u0647\u0627 \u0645\u0631\u0627 \u0628\u0647 \u062f\u0641\u062a\u0631\u0634\u0627\u0646 \u0635\u062f\u0627 \u0632\u062f\u0646\u062f \u0648 \u0628\u0627 \u0633\u0631 \u0628\u0647 \u0635\u0646\u062f\u0644\u06cc \u0645\u0642\u0627\u0628\u0644 \u0645\u06cc\u0632 \u0686\u0648\u0628 \u0645\u0627\u0647\u0648\u0646\u0634\u0627\u0646 \u0627\u0634\u0627\u0631\u0647 \u06a9\u0631\u062f\u0646\u062f. &#8220;\u0628\u0631\u062e\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0646\u062f \u06a9\u0647 \u06a9\u0644\u06cc\u062f \u0628\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u06a9\u0627\u0631 \u06a9\u0646\u062f.&#8221; \u0628\u0647 \u062c\u0647\u0646\u0645 \u0628\u0627 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646! &#8220;\u0641\u0644\u0634 \u0631\u0648 \u0628\u0647 \u0628\u0627\u0644\u0627 \u0628\u0627\u06cc\u062f \u0622\u062e\u0631\u06cc\u0646 \u0641\u0631\u0645\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u062f.&#8221; \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u06a9\u0644\u06cc\u062f \u067e\u06cc\u06a9\u0627\u0646 \u0628\u0633\u06cc\u0627\u0631 \u062f\u0647\u0647 \u0646\u0648\u062f \u0627\u0633\u062a! &#8220;\u0622\u06cc\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u062a\u0627 \u067e\u0627\u06cc\u0627\u0646 Q5 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f\u061f&#8221; \u0645\u0646 \u0627\u0633\u062a\u0639\u0641\u0627 \u062f\u0627\u062f\u0645!<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647 \u067e\u0634\u062a \u0645\u06cc\u0632 \u062e\u0648\u062f \u0628\u0631\u06af\u0634\u062a\u0645 \u0648 REPL \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u062f\u0627\u062f\u0645.<\/p>\n<p>\u0622\u0646\u0642\u062f\u0631 \u0622\u0646 \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u062f\u0627\u062f\u0645 \u06a9\u0647 \u0647\u0645\u0647 \u06a9\u0644\u06cc\u062f\u0647\u0627 \u06a9\u0627\u0631 \u06a9\u0631\u062f\u0646\u062f. \u06a9\u0644\u06cc\u062f \u0628\u06a9 \u0627\u0633\u067e\u06cc\u0633\u060c \u0641\u0644\u0634 \u0631\u0648 \u0628\u0647 \u0628\u0627\u0644\u0627\u060c \u0641\u0644\u0634 \u067e\u0627\u06cc\u06cc\u0646\u060c \u0641\u0644\u0634 \u0686\u067e\u060c \u0648 \u0622\u062e\u0631\u06cc\u0646\u060c \u0627\u0645\u0627 \u0646\u0647 \u06a9\u0645 \u0627\u0647\u0645\u06cc\u062a\u060c \u0641\u0644\u0634 \u0628\u06a9 \u0627\u0633\u067e\u06cc\u0633. \u06cc\u06a9 \u062d\u0633\u0627\u0628\u062f\u0627\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627 REPL \u062c\u062f\u06cc\u062f \u06cc\u06a9 \u0631\u0648\u0632 \u06a9\u0627\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f. \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9. \u0627\u06cc\u0646 \u0647\u0645\u0627\u0646 \u0627\u0639\u062f\u0627\u062f\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062d\u0633\u0627\u0628\u062f\u0627\u0631 \u062a\u0627\u06cc\u067e \u0645\u06cc \u06a9\u0646\u062f\u060c \u0646\u0647 \u0628\u0645\u0628\u06cc \u06a9\u0647 \u0628\u0647 \u0622\u0631\u0627\u0645\u06cc \u067e\u062e\u0634 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0645\u0646 REPL \u0631\u0627 \u0628\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06af\u0627\u0647 \u0641\u0631\u0633\u062a\u0627\u062f\u0645 \u0648 \u0628\u0647 \u0645\u0627\u0634\u06cc\u0646\u200c\u06a9\u0627\u0631 \u0627\u0635\u0644\u06cc\u200c\u0627\u0645 \u06af\u0641\u062a\u0645 \u06a9\u0647 \u0627\u06cc\u0646 \u0633\u0641\u0627\u0631\u0634 \u0631\u0627 \u0628\u0627 \u0639\u062c\u0644\u0647 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f. \u0627\u06cc\u0646 \u0647\u0645\u0627\u0646 \u067e\u0627\u0633\u062e\u06cc \u0627\u0633\u062a \u06a9\u0647 \u06af\u0641\u062a\u0645 \u0648 \u0627\u0632 \u0646\u06af\u0627\u0647 \u0686\u0634\u0645\u0627\u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0633\u062a\u0645 \u0628\u0641\u0647\u0645\u0645 \u06a9\u0647 \u0641\u0647\u0645\u06cc\u062f\u0646\u062f. 750 \u0645\u06cc\u0644\u06cc\u200c\u062b\u0627\u0646\u06cc\u0647 \u0628\u0639\u062f \u0633\u0627\u062e\u062a \u06a9\u0627\u0645\u0644 \u0634\u062f \u0648 \u0645\u0627 \u0627\u0632 \u06a9\u0644\u06cc\u062f \u067e\u06cc\u06a9\u0627\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u0631\u062f\u06cc\u0645. \u0645\u0646 \u0645\u062d\u0635\u0648\u0644 \u0631\u0627 \u0628\u0647 \u0633\u0645\u062a \u06a9\u0644\u0627\u0647 \u06af\u06cc\u0633 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af \u0628\u0631\u062f\u0645\u060c \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0645 \u0627\u0644\u062a\u0645\u0627\u0633 \u06a9\u0631\u062f\u0645 \u0648 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0646\u0638\u0631\u0634\u0627\u0646 \u0631\u0627 \u067e\u0631\u0633\u06cc\u062f\u0645. \u0622\u0646\u0647\u0627 \u0686\u0646\u062f \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0646\u062f\u060c \u0686\u0646\u062f \u0686\u0627\u067e \u0631\u0627 \u0686\u0627\u067e \u06a9\u0631\u062f\u0646\u062f \u0648 \u062a\u0639\u062f\u0627\u062f\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646\u062f. \u0627\u0634\u062a\u0628\u0627\u0647 \u06a9\u0631\u062f\u0646\u062f \u0648 \u06a9\u0644\u06cc\u062f \u0628\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u0631\u0627 \u0632\u062f\u0646\u062f. \u0686\u0634\u0645\u0627\u0645\u0648 \u0686\u0631\u062e\u0648\u0646\u062f\u0645 \u0686\u0648\u0646 \u062c\u062f\u06cc \u06a9\u06cc \u0627\u0634\u062a\u0628\u0627\u0647 \u0645\u06cc\u06a9\u0646\u0647 \u0648\u0644\u06cc \u0631\u0627\u0636\u06cc \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u0648\u0645\u062f. \u0622\u0646\u0647\u0627 \u0645\u062a\u0648\u062c\u0647 \u0634\u062f\u0646\u062f \u06a9\u0647 \u0646\u0645\u06cc \u062e\u0648\u0627\u0647\u0646\u062f \u0641\u0631\u0645\u0627\u0646 \u0637\u0648\u0644\u0627\u0646\u06cc \u0631\u0627 \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u062a\u0627\u06cc\u067e \u06a9\u0631\u062f\u0647 \u0628\u0648\u062f\u0646\u062f \u0627\u062c\u0631\u0627 \u06a9\u0646\u0646\u062f \u0648 \u0627\u06cc\u0646\u062c\u0627 \u062c\u0627\u06cc\u06cc \u0628\u0648\u062f \u06a9\u0647 \u0632\u0646\u062f\u06af\u06cc \u0645\u0646 \u062f\u0631 \u06cc\u06a9 \u0633\u0628\u062f \u062f\u0633\u062a\u06cc \u0628\u0647 \u062c\u0647\u0646\u0645 \u0631\u0641\u062a. \u0622\u0646\u0647\u0627 \u0636\u0631\u0628\u0647 \u0628\u0632\u0646\u06cc\u062f. Ctrl \u062c- \u062c\u062f\u06cc\u060c \u0686\u0647 \u06a9\u0633\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f\u061f! \u0645\u06cc \u062f\u0627\u0646\u06cc\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u0628\u0647 \u0631\u0648\u0646\u062f \u0641\u0639\u0644\u06cc \u067e\u0627\u06cc\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f\u060c \u062f\u0631\u0633\u062a \u0627\u0633\u062a\u061f \u062f\u0631\u0633\u062a\u0647\u061f\u061f\u061f<\/p>\n<p>&#8220;\u0645\u0627 \u062a\u0627 \u067e\u0627\u06cc\u0627\u0646 \u0633\u0627\u0644 \u0622\u06cc\u0646\u062f\u0647 \u0628\u0647 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc Ctrl-C \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645.&#8221; \u0627\u06cc\u0646 \u0627\u0641\u0631\u0627\u062f \u0648 \u0645\u0637\u0627\u0644\u0628\u0627\u062a\u0634\u0627\u0646. \u0645\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc Ctrl-C \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645. \u0627\u0645\u0627 \u0642\u0637\u0639\u0627 \u062f\u0631 \u062f\u0648 \u0633\u0627\u0644 \u0622\u06cc\u0646\u062f\u0647 \u0646\u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647 \u0645\u06cc\u0632 \u06a9\u0627\u0631\u0645 \u0628\u0631\u06af\u0634\u062a\u0645 \u0648 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 Ctrl-C \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0645.<\/p>\n<p>  \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0627\u06cc\u0646 REPL \u0631\u0627 \u0634\u0627\u06cc\u0633\u062a\u0647 \u0627\u0641\u0631\u0627\u062f\u06cc \u0628\u0627 \u062a\u0645\u0627\u06cc\u0644\u0627\u062a \u0627\u0646\u06af\u0634\u062a\u0627\u0646 \u0686\u0627\u0642 \u06a9\u0631\u062f\u061f<\/p>\n<p>  \u0622\u06cc\u0627 \u0645\u0646 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u062e\u0648\u0627\u0647\u0645 \u0628\u0648\u062f\u061f<\/p>\n<p>\u0645\u0646 \u062a\u0645\u0627\u0645 \u0622\u06cc\u0646\u062f\u0647 \u062d\u0631\u0641\u0647 \u0627\u06cc \u0648 \u0645\u0627\u0644\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646 \u0686\u06cc\u0632\u0647\u0627 &#8220;\u0627\u0632 \u0627\u0628\u062a\u062f\u0627&#8221; \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0627\u0645\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0631 \u0631\u0648\u0632 \u0627\u0648\u0644 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0628\u0627 \u06cc\u06a9 \u0645\u0639\u0636\u0644 \u0645\u0648\u0627\u062c\u0647 \u0634\u062f\u0645. \u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645 crossterm \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u06a9\u0644\u06cc\u062f \u062f\u0631 \u062f\u0631\u062c\u0647 \u0627\u0648\u0644 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0628\u06cc\u0646 \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0627\u0633\u062a. \u0647\u0631 \u0686\u0646\u062f \u0635\u0627\u062f\u0642\u0627\u0646\u0647 \u0628\u06af\u0648\u06cc\u0645\u060c crossterm \u062e\u06cc\u0644\u06cc \u062e\u06cc\u0644\u06cc \u062e\u0648\u0628 \u0628\u0648\u062f API \u0628\u0635\u0631\u06cc \u0627\u0633\u062a \u0648 \u0645\u0646 \u0628\u0647 \u062e\u0635\u0648\u0635 \u0627\u0632 \u0622\u0646 \u0631\u0627\u0636\u06cc \u0628\u0648\u062f\u0645 KeyModifiers (\u06a9\u0647 \u0645\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0631\u0633\u06cc\u062f\u06af\u06cc \u062f\u0627\u0634\u062a\u06cc\u0645 Ctrl-C\u060c \u06a9\u0647 \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0631\u062f\u0645 \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a\u060c \u062f\u0631 \u0628\u0627\u0644\u0627 \u0628\u0628\u06cc\u0646\u06cc\u062f).<\/p>\n<p>  \u062d\u0627\u0644\u062a \u062e\u0627\u0645 \u062f\u0631\u062f\u0646\u0627\u06a9 \u0627\u0633\u062a<\/p>\n<p>\u0645\u0627 \u0628\u0647 \u0622\u0646 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u06cc\u0645 \u062a\u0627 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0627 \u062c\u0627\u0628\u062c\u0627 \u0646\u06a9\u0646\u062f. \u0627\u0645\u0627 \u0644\u0639\u0646\u062a\u06cc\u060c \u0646\u0645\u06cc\u200c\u062f\u0627\u0646\u0633\u062a\u0645 \u06a9\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f \u0635\u0641\u062d\u0647 \u0645\u0627 \u0628\u0647 \u06cc\u06a9 \u0645\u0627\u0634\u06cc\u0646 \u062a\u062d\u0631\u06cc\u0631 \u062e\u0631\u0627\u0628 \u062a\u0628\u062f\u06cc\u0644 \u0634\u0648\u062f. \u0628\u0647 \u0647\u0631 \u062d\u0627\u0644\u060c \u0645\u0646 \u0645\u062c\u0628\u0648\u0631 \u0634\u062f\u0645 \u0647\u0645\u0647 \u0631\u0634\u062a\u0647 \u0647\u0627 \u0631\u0627 \u0639\u0627\u062f\u06cc \u06a9\u0646\u0645 \u062a\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u062e\u0637 \u062c\u062f\u06cc\u062f\u060c \u06cc\u06a9 \u0628\u0627\u0632\u06af\u0634\u062a \u06a9\u0627\u0644\u0633\u06a9\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0645. \u06a9\u0647 \u062e\u0648\u0628 \u06a9\u0627\u0631 \u06a9\u0631\u062f \u0648 \u0645\u0646 \u0627\u0632 \u0622\u0646 \u0647\u06cc\u062c\u0627\u0646 \u0632\u062f\u0647 \u0647\u0633\u062a\u0645.<\/p>\n<p>\/\/\/ When the terminal is in raw mode, we must emit a carriage return in addition to a newline,<br \/>\n\/\/\/ because that does not happen automatically.<br \/>\nfn normalize&lt;T: Display&gt;(err: T) -&gt; String {<br \/>\n    let formatted = format!(&#8220;{}&#8221;, err);<br \/>\n    if terminal::is_raw_mode_enabled().expect(&#8220;Failed to query terminal raw mode&#8221;) {<br \/>\n        formatted.replace(&#8220;\\n&#8221;, &#8220;\\n\\r&#8221;)<br \/>\n    } else {<br \/>\n        formatted.to_string()<br \/>\n    }<br \/>\n}<\/p>\n<p>\/\/\/ Print command which will normalize newlines + carriage returns before printing.<br \/>\nfn print_raw&lt;T: Display&gt;(val: T) {<br \/>\n    print!(&#8220;{}&#8221;, normalize(val));<br \/>\n    io::stdout().flush().expect(&#8220;Failed to flush stdout&#8221;);<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u062a\u0633\u062a \u0627\u062f\u063a\u0627\u0645 \u062c\u0627\u0644\u0628 \u0628\u0648\u062f<\/p>\n<p>\u062a\u062d\u062a REPL \u0642\u062f\u06cc\u0645\u06cc \u062e\u0648\u062f (\u06a9\u0647 \u062a\u0631\u062c\u06cc\u062d \u062f\u0627\u062f\u0645\u060c \u062f\u0631 \u0628\u0627\u0644\u0627 \u0628\u0628\u06cc\u0646\u06cc\u062f)\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0645 \u0622\u0646 \u0631\u0627 \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0628\u0627\u06cc\u0646\u0631\u06cc \u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u062f\u0647\u0627\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0647 stdin \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u0645. \u0645\u0646 \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u0645 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0627\u062e\u062a\u0644\u0627\u0641 \u062f\u0631 \u0642\u0631\u0627\u0631\u062f\u0627\u062f\u060c \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0631\u0627\u0633 \u062a\u0631\u0645 \u0627\u0632 \u06a9\u0627\u0631 \u0627\u0641\u062a\u0627\u062f. \u0645\u0646 \u0635\u0627\u062f\u0642\u0627\u0646\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0645 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0645\u0644 \u062a\u0648\u0636\u06cc\u062d \u062f\u0647\u0645\u060c \u0627\u0645\u0627 event::read() \u062f\u0631 \u062a\u0633\u062a \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0628\u0627 \u0648\u0631\u0648\u062f\u06cc stdin \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0645\u06cc\u200c\u0631\u0633\u062f \u0648 \u0634\u06a9\u0633\u062a \u0645\u06cc\u200c\u062e\u0648\u0631\u062f. \u067e\u0633 \u0645\u0633\u062e\u0631\u0647 \u0627\u0634 \u06a9\u0631\u062f\u0645<\/p>\n<p>pub trait TerminalIO {<br \/>\n    fn read_event(&amp;mut self) -&gt; Result&lt;Event, io::Error&gt;;<br \/>\n    fn write&lt;T: Display&gt;(&amp;mut self, output: T) -&gt; io::Result&lt;()&gt;;<br \/>\n    fn writeln&lt;T: Display&gt;(&amp;mut self, output: T) -&gt; io::Result&lt;()&gt;;<br \/>\n}<\/p>\n<p>\/\/\/ A mock for testing that doesn&#8217;t use `crossterm`.<br \/>\nstruct MockTerminalIO {<br \/>\n    \/\/\/ Predefined events for testing<br \/>\n    events: Vec&lt;Event&gt;,<\/p>\n<p>    \/\/\/ Captured output for assertions<br \/>\n    output: Vec&lt;String&gt;,<br \/>\n}<\/p>\n<p>impl TerminalIO for MockTerminalIO {<br \/>\n    fn read_event(&amp;mut self) -&gt; Result&lt;Event, io::Error&gt; {<br \/>\n        if self.events.is_empty() {<br \/>\n            Err(io::Error::new(io::ErrorKind::Other, &#8220;No more events&#8221;))<br \/>\n        } else {<br \/>\n            \/\/ remove from the front (semantically similar to VecDequeue::pop_front).<br \/>\n            Ok(self.events.remove(0))<br \/>\n        }<br \/>\n    }<\/p>\n<p>    fn write&lt;T: Display&gt;(&amp;mut self, output: T) -&gt; io::Result&lt;()&gt; {<br \/>\n        self.output.push(format!(&#8220;{}&#8221;, output));<br \/>\n        Ok(())<br \/>\n    }<\/p>\n<p>    fn writeln&lt;T: Display&gt;(&amp;mut self, output: T) -&gt; io::Result&lt;()&gt; {<br \/>\n        self.write(output)?;<br \/>\n        self.write(&#8220;\\n&#8221;)?;<br \/>\n        Ok(())<br \/>\n    }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u06a9\u0647 \u0645\u0646\u062c\u0631 \u0628\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f\u0646 \u06a9\u0644 \u0645\u0648\u0636\u0648\u0639 \u0628\u0647 \u06cc\u06a9 \u0622\u0632\u0645\u0648\u0646 \u0648\u0627\u062d\u062f \u0634\u062f\u061f \u0631\u0627\u0633\u062a\u0634 \u0645\u0646 \u0646\u0645\u06cc \u062f\u0627\u0646\u0645. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0627\u06af\u0631 \u0627\u0644\u0641) \u06cc\u06a9 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0628\u0627\u06cc\u0646\u0631\u06cc \u062f\u06cc\u06af\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u06a9\u0646\u0645\u060c \u06cc\u0627 2) \u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u0645 \/ \u06cc\u06a9 \u067e\u0648\u0631\u062a \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u0645 \/ \u062f\u0631 \u06cc\u06a9 \u0633\u0648\u06a9\u062a \u062f\u0631 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u062a\u0633\u062a \u06af\u0648\u0634 \u062f\u0647\u0645\u060c \u0622\u0646 \u0631\u0627 \u062a\u0633\u062a \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u0646\u0627\u0645\u0645. \u0627\u06af\u0631 \u062a\u0639\u0631\u06cc\u0641 \u062f\u06cc\u06af\u0631\u06cc \u062f\u0627\u0631\u06cc\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0631 \u0646\u0638\u0631\u0627\u062a \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u062a\u0639\u0631\u06cc\u0641 \u0646\u06a9\u0646\u06cc\u062f \u0632\u06cc\u0631\u0627 TBH \u0622\u0632\u0627\u0631\u062f\u0647\u0646\u062f\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u200c\u0631\u0633\u062f.<\/p>\n<p>\/\/\/ Run the complete flow, from input code string to return value string. If you need any Ctrl<br \/>\n\/\/\/ modifiers, do not use this!<br \/>\nfn run_and_return(input: &amp;str) -&gt; String {<br \/>\n    let mut terminal = MockTerminalIO::from_str(input);<br \/>\n    Repl::new().run(&amp;mut terminal);<br \/>\n    terminal.return_val()<br \/>\n}<\/p>\n<p>fn string_to_events(input: &amp;str) -&gt; Vec&lt;Event&gt; {<br \/>\n    input<br \/>\n        .chars()<br \/>\n        .map(|c| {<br \/>\n            let key_code = match c {<br \/>\n                &#8216;\\n&#8217; =&gt; KeyCode::Enter,<br \/>\n                _ =&gt; KeyCode::Char(c),<br \/>\n            };<br \/>\n            Event::Key(KeyEvent::new(key_code, KeyModifiers::NONE))<br \/>\n        })<br \/>\n        .collect()<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0631\u0627 \u0628\u0627 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631 \u0646\u0633\u0628\u062a\u0627\u064b \u06a9\u0645\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>#[test]\nfn test_repl_name_error() {<br \/>\n    let return_val = run_and_return(&#8220;e\\n&#8221;);<br \/>\n    assert!(return_val.contains(&#8220;NameError: name &#8216;e&#8217; is not defined&#8221;));<br \/>\n}<\/p>\n<p>#[test]\nfn test_repl_expr() {<br \/>\n    let third_from_last = run_and_return(&#8220;12345\\n&#8221;);<br \/>\n    assert_eq!(third_from_last, &#8220;12345&#8221;);<br \/>\n}<\/p>\n<p>#[test]\nfn test_repl_statement() {<br \/>\n    let return_val = run_and_return(&#8220;a = 5.5\\n&#8221;);<\/p>\n<p>    \/\/ empty string because a statement does not have a return value<br \/>\n    assert_eq!(return_val, &#8220;&#8221;);<br \/>\n}<\/p>\n<p>#[test]\nfn test_repl_function() {<br \/>\n    let code = r#&#8221;<br \/>\ndef foo():<br \/>\n    a = 10<br \/>\n    return 2 * a<\/p>\n<p>foo()<br \/>\n&#8220;#;<br \/>\n    let return_val = run_and_return(code);<br \/>\n    assert_eq!(return_val, &#8220;20&#8221;);<br \/>\n}<\/p>\n<p>#[test]\nfn test_repl_ctrl_c() {<br \/>\n    let mut events = string_to_events(&#8220;123456789\\n&#8221;);<br \/>\n    let ctrl_c = Event::Key(KeyEvent::new(KeyCode::Char(&#8216;c&#8217;), KeyModifiers::CONTROL));<br \/>\n    events.insert(4, ctrl_c);<br \/>\n    let mut terminal = MockTerminalIO::new(events);<\/p>\n<p>    Repl::new().run(&amp;mut terminal);<br \/>\n    assert_eq!(terminal.return_val(), &#8220;56789&#8221;);<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0646\u0642\u0627\u0637 \u0648\u0631\u0648\u062f\u06cc \u06a9\u062f \u0645\u0631\u0627 \u0635\u0628\u062d \u0627\u0632 \u0631\u062e\u062a\u062e\u0648\u0627\u0628 \u0628\u0644\u0646\u062f \u0645\u06cc \u06a9\u0646\u062f<\/p>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0646\u06af\u06cc\u0632\u0647\u200c\u0647\u0627\u06cc \u0645\u0646 \u062f\u0631 \u0627\u0641\u0632\u0648\u062f\u0646 \u06cc\u06a9 REPL \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0628\u0648\u062f \u06a9\u0647 \u0645\u0639\u062a\u0642\u062f\u0645 \u0648\u0642\u062a\u06cc \u06cc\u06a9 \u0648\u0631\u0648\u062f\u06cc \u062f\u0648\u0645 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c \u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u0647\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f. \u0634\u0645\u0627 \u0627\u0633\u0627\u0633\u0627\u064b \u062f\u0648\u0645\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062e\u0648\u062f \u0647\u0633\u062a\u06cc\u062f\u060c \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0628\u0647 \u062f\u0631\u06a9 \u06cc\u06a9 \u0627\u0646\u062a\u0632\u0627\u0639 \u06a9\u0627\u0645\u0644 \u06a9\u0647 \u0647\u0645\u0647 \u062f\u0631 \u062c\u0633\u062a\u062c\u0648\u06cc \u0622\u0646 \u0628\u0647 \u0635\u0641\u062d\u0647\u200c\u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062e\u0648\u062f \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u06cc\u0645\u060c \u0646\u0632\u062f\u06cc\u06a9\u200c\u062a\u0631 \u0634\u0648\u06cc\u062f. \u0645\u0646\u0638\u0648\u0631\u0645 \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u062c\u062f\u06cc \u0627\u0633\u062a.<\/p>\n<p>  &#8220;\u0635\u0641\u0631 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc&#8221; \ud83d\ude09<\/p>\n<p>REPL \u0627\u06a9\u0646\u0648\u0646 \u067e\u0634\u062a \u067e\u0631\u0686\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0633\u062a. \u0645\u0646 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u062a\u0641\u0633\u06cc\u0631 \u06a9\u062f \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0627 \u0628\u0627 \u06a9\u0645\u06a9 \u062c\u0639\u0628\u0647\u200c\u0647\u0627\u06cc \u0634\u062e\u0635 \u062b\u0627\u0644\u062b \u0632\u0646\u062f\u0647 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0645\u060c \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u06a9\u0647 crossterm \u06cc\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627 \u0628\u0627\u0634\u062f \u06cc\u0627 \u06cc\u06a9 \u067e\u0631\u0686\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0645. \u062d\u0627\u0644\u0627\u060c \u0627\u06af\u0631 \u0628\u062f\u0648\u0646 \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 REPL \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u00ab\u0645\u0645\u0641\u06cc\u0633\u00bb \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f\u060c \u0645\u0624\u062f\u0628\u0627\u0646\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0645\u06cc \u06af\u0648\u06cc\u062f \u00ab\u0633\u0627\u062e\u062a \u0627\u0634\u062a\u0628\u0627\u0647\u060c \u0627\u062d\u0645\u0642\u0627\u0646\u0647\u00bb.<\/p>\n<p>  \u062e\u062f\u0627\u062d\u0627\u0641\u0638<\/p>\n<p>REPL \u0627\u06cc\u0646\u062c\u0627\u0633\u062a. \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f. \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u062e\u0631\u06cc\u062f\u060c \u0628\u0647 \u0646\u0638\u0631 \u06cc\u06a9 \u06a9\u0644\u0627\u0647\u0628\u0631\u062f\u0627\u0631\u06cc \u0627\u0633\u062a. \u062e\u0648\u0628 \u0628\u0627\u0634 \u0648 \u0632\u0648\u062f \u062d\u0631\u0641 \u0628\u0632\u0646<\/p>\n<div data-article-id=\"2048594\" id=\"article-body\">\n<p>\u0645\u0641\u0633\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0645\u0646\u060c \u0645\u0645\u0641\u06cc\u0633\u060c \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 REPL (\u062d\u0644\u0642\u0647 \u062e\u0648\u0627\u0646\u062f\u0646-\u0627\u06cc\u0648\u0627\u0644-\u0686\u0627\u067e) \u0627\u0633\u062a!<\/p>\n<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u062e\u0628\u0631 \u0642\u062f\u06cc\u0645\u06cc \u0627\u0633\u062a. \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u062c\u063a\u062f \u067e\u06cc\u0631 \u062f\u0627\u0646\u0627 \u0647\u06cc\u0686 \u0627\u0634\u062a\u0628\u0627\u0647\u06cc \u0645\u0631\u062a\u06a9\u0628 \u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u062f\u0644\u062e\u0648\u0627\u0647 \u062a\u0641\u0633\u06cc\u0631 \u06a9\u0646\u06cc\u062f. \u0628\u0627 \u0641\u0631\u0636 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631\u06af\u0632 \u0646\u062e\u0648\u0627\u0633\u062a\u06cc\u062f \u06cc\u06a9 \u0639\u0628\u0627\u0631\u062a \u0631\u0627 \u062f\u0648 \u0628\u0627\u0631 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f\u060c \u06cc\u0627 \u0627\u06af\u0631 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u06a9\u0631\u062f\u06cc\u062f\u060c \u0628\u062f\u062a\u0627\u0646 \u0646\u0645\u06cc \u0622\u0645\u062f \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0627\u06cc\u067e \u06a9\u0646\u06cc\u062f. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627 \u0635\u0641\u0631 \u0627\u0634\u062a\u0628\u0627\u0647.<\/p>\n<p>\u0645\u0646 \u0627\u0632 \u0627\u06cc\u0646 REPL \u06a9\u0627\u0645\u0644\u0627 \u0631\u0627\u0636\u06cc \u0628\u0648\u062f\u0645. \u062d\u062a\u06cc \u0647\u06cc\u062c\u0627\u0646 \u0632\u062f\u0647 \u0645\u0646 \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u06cc\u0646 REPL \u0628\u0647 \u062e\u0627\u0646\u0647 \u0646\u0648\u0634\u062a\u0647 \u0628\u0648\u062f\u0645. \u0627\u0645\u0627 \u0631\u0626\u06cc\u0633 \u0631\u0626\u06cc\u0633\u0627\u0646 \u0645\u0646 \u0627\u0632 \u0645\u0627 \u062e\u0648\u0627\u0633\u062a \u06a9\u0647 REPL \u0631\u0627 \u0628\u0631\u0627\u06cc \u0646\u062a\u06cc\u062c\u0647 \u0646\u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0645\u0631\u062f\u0645 \u0628\u0647\u0628\u0648\u062f \u062f\u0647\u06cc\u0645. \u0622\u0646\u0647\u0627 \u0645\u0631\u0627 \u0628\u0647 \u062f\u0641\u062a\u0631\u0634\u0627\u0646 \u0635\u062f\u0627 \u0632\u062f\u0646\u062f \u0648 \u0628\u0627 \u0633\u0631 \u0628\u0647 \u0635\u0646\u062f\u0644\u06cc \u0645\u0642\u0627\u0628\u0644 \u0645\u06cc\u0632 \u0686\u0648\u0628 \u0645\u0627\u0647\u0648\u0646\u0634\u0627\u0646 \u0627\u0634\u0627\u0631\u0647 \u06a9\u0631\u062f\u0646\u062f. &#8220;\u0628\u0631\u062e\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0646\u062a\u0638\u0627\u0631 \u062f\u0627\u0631\u0646\u062f \u06a9\u0647 \u06a9\u0644\u06cc\u062f \u0628\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u06a9\u0627\u0631 \u06a9\u0646\u062f.&#8221; \u0628\u0647 \u062c\u0647\u0646\u0645 \u0628\u0627 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646! &#8220;\u0641\u0644\u0634 \u0631\u0648 \u0628\u0647 \u0628\u0627\u0644\u0627 \u0628\u0627\u06cc\u062f \u0622\u062e\u0631\u06cc\u0646 \u0641\u0631\u0645\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u062f.&#8221; \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u06a9\u0644\u06cc\u062f \u067e\u06cc\u06a9\u0627\u0646 \u0628\u0633\u06cc\u0627\u0631 \u062f\u0647\u0647 \u0646\u0648\u062f \u0627\u0633\u062a! &#8220;\u0622\u06cc\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u062a\u0627 \u067e\u0627\u06cc\u0627\u0646 Q5 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f\u061f&#8221; \u0645\u0646 \u0627\u0633\u062a\u0639\u0641\u0627 \u062f\u0627\u062f\u0645!<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647 \u067e\u0634\u062a \u0645\u06cc\u0632 \u062e\u0648\u062f \u0628\u0631\u06af\u0634\u062a\u0645 \u0648 REPL \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u062f\u0627\u062f\u0645.<\/p>\n<p>\u0622\u0646\u0642\u062f\u0631 \u0622\u0646 \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u062f\u0627\u062f\u0645 \u06a9\u0647 \u0647\u0645\u0647 \u06a9\u0644\u06cc\u062f\u0647\u0627 \u06a9\u0627\u0631 \u06a9\u0631\u062f\u0646\u062f. \u06a9\u0644\u06cc\u062f \u0628\u06a9 \u0627\u0633\u067e\u06cc\u0633\u060c \u0641\u0644\u0634 \u0631\u0648 \u0628\u0647 \u0628\u0627\u0644\u0627\u060c \u0641\u0644\u0634 \u067e\u0627\u06cc\u06cc\u0646\u060c \u0641\u0644\u0634 \u0686\u067e\u060c \u0648 \u0622\u062e\u0631\u06cc\u0646\u060c \u0627\u0645\u0627 \u0646\u0647 \u06a9\u0645 \u0627\u0647\u0645\u06cc\u062a\u060c \u0641\u0644\u0634 \u0628\u06a9 \u0627\u0633\u067e\u06cc\u0633. \u06cc\u06a9 \u062d\u0633\u0627\u0628\u062f\u0627\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0627 REPL \u062c\u062f\u06cc\u062f \u06cc\u06a9 \u0631\u0648\u0632 \u06a9\u0627\u0631\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f. \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9 \u062a\u06cc\u06a9. \u0627\u06cc\u0646 \u0647\u0645\u0627\u0646 \u0627\u0639\u062f\u0627\u062f\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062d\u0633\u0627\u0628\u062f\u0627\u0631 \u062a\u0627\u06cc\u067e \u0645\u06cc \u06a9\u0646\u062f\u060c \u0646\u0647 \u0628\u0645\u0628\u06cc \u06a9\u0647 \u0628\u0647 \u0622\u0631\u0627\u0645\u06cc \u067e\u062e\u0634 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0645\u0646 REPL \u0631\u0627 \u0628\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06af\u0627\u0647 \u0641\u0631\u0633\u062a\u0627\u062f\u0645 \u0648 \u0628\u0647 \u0645\u0627\u0634\u06cc\u0646\u200c\u06a9\u0627\u0631 \u0627\u0635\u0644\u06cc\u200c\u0627\u0645 \u06af\u0641\u062a\u0645 \u06a9\u0647 \u0627\u06cc\u0646 \u0633\u0641\u0627\u0631\u0634 \u0631\u0627 \u0628\u0627 \u0639\u062c\u0644\u0647 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u062f. \u0627\u06cc\u0646 \u0647\u0645\u0627\u0646 \u067e\u0627\u0633\u062e\u06cc \u0627\u0633\u062a \u06a9\u0647 \u06af\u0641\u062a\u0645 \u0648 \u0627\u0632 \u0646\u06af\u0627\u0647 \u0686\u0634\u0645\u0627\u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0633\u062a\u0645 \u0628\u0641\u0647\u0645\u0645 \u06a9\u0647 \u0641\u0647\u0645\u06cc\u062f\u0646\u062f. 750 \u0645\u06cc\u0644\u06cc\u200c\u062b\u0627\u0646\u06cc\u0647 \u0628\u0639\u062f \u0633\u0627\u062e\u062a \u06a9\u0627\u0645\u0644 \u0634\u062f \u0648 \u0645\u0627 \u0627\u0632 \u06a9\u0644\u06cc\u062f \u067e\u06cc\u06a9\u0627\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u06a9\u0631\u062f\u06cc\u0645. \u0645\u0646 \u0645\u062d\u0635\u0648\u0644 \u0631\u0627 \u0628\u0647 \u0633\u0645\u062a \u06a9\u0644\u0627\u0647 \u06af\u06cc\u0633 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af \u0628\u0631\u062f\u0645\u060c \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0645 \u0627\u0644\u062a\u0645\u0627\u0633 \u06a9\u0631\u062f\u0645 \u0648 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0646\u0638\u0631\u0634\u0627\u0646 \u0631\u0627 \u067e\u0631\u0633\u06cc\u062f\u0645. \u0622\u0646\u0647\u0627 \u0686\u0646\u062f \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0646\u062f\u060c \u0686\u0646\u062f \u0686\u0627\u067e \u0631\u0627 \u0686\u0627\u067e \u06a9\u0631\u062f\u0646\u062f \u0648 \u062a\u0639\u062f\u0627\u062f\u06cc \u0627\u0641\u0632\u0648\u062f\u0646\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646\u062f. \u0627\u0634\u062a\u0628\u0627\u0647 \u06a9\u0631\u062f\u0646\u062f \u0648 \u06a9\u0644\u06cc\u062f \u0628\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u0631\u0627 \u0632\u062f\u0646\u062f. \u0686\u0634\u0645\u0627\u0645\u0648 \u0686\u0631\u062e\u0648\u0646\u062f\u0645 \u0686\u0648\u0646 \u062c\u062f\u06cc \u06a9\u06cc \u0627\u0634\u062a\u0628\u0627\u0647 \u0645\u06cc\u06a9\u0646\u0647 \u0648\u0644\u06cc \u0631\u0627\u0636\u06cc \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u0648\u0645\u062f. \u0622\u0646\u0647\u0627 \u0645\u062a\u0648\u062c\u0647 \u0634\u062f\u0646\u062f \u06a9\u0647 \u0646\u0645\u06cc \u062e\u0648\u0627\u0647\u0646\u062f \u0641\u0631\u0645\u0627\u0646 \u0637\u0648\u0644\u0627\u0646\u06cc \u0631\u0627 \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u062a\u0627\u06cc\u067e \u06a9\u0631\u062f\u0647 \u0628\u0648\u062f\u0646\u062f \u0627\u062c\u0631\u0627 \u06a9\u0646\u0646\u062f \u0648 \u0627\u06cc\u0646\u062c\u0627 \u062c\u0627\u06cc\u06cc \u0628\u0648\u062f \u06a9\u0647 \u0632\u0646\u062f\u06af\u06cc \u0645\u0646 \u062f\u0631 \u06cc\u06a9 \u0633\u0628\u062f \u062f\u0633\u062a\u06cc \u0628\u0647 \u062c\u0647\u0646\u0645 \u0631\u0641\u062a. \u0622\u0646\u0647\u0627 \u0636\u0631\u0628\u0647 \u0628\u0632\u0646\u06cc\u062f. Ctrl \u062c- \u062c\u062f\u06cc\u060c \u0686\u0647 \u06a9\u0633\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f\u061f! \u0645\u06cc \u062f\u0627\u0646\u06cc\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u0628\u0647 \u0631\u0648\u0646\u062f \u0641\u0639\u0644\u06cc \u067e\u0627\u06cc\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f\u060c \u062f\u0631\u0633\u062a \u0627\u0633\u062a\u061f \u062f\u0631\u0633\u062a\u0647\u061f\u061f\u061f<\/p>\n<p>&#8220;\u0645\u0627 \u062a\u0627 \u067e\u0627\u06cc\u0627\u0646 \u0633\u0627\u0644 \u0622\u06cc\u0646\u062f\u0647 \u0628\u0647 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc Ctrl-C \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u0645.&#8221; \u0627\u06cc\u0646 \u0627\u0641\u0631\u0627\u062f \u0648 \u0645\u0637\u0627\u0644\u0628\u0627\u062a\u0634\u0627\u0646. \u0645\u0646 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc Ctrl-C \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645. \u0627\u0645\u0627 \u0642\u0637\u0639\u0627 \u062f\u0631 \u062f\u0648 \u0633\u0627\u0644 \u0622\u06cc\u0646\u062f\u0647 \u0646\u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/p>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647 \u0645\u06cc\u0632 \u06a9\u0627\u0631\u0645 \u0628\u0631\u06af\u0634\u062a\u0645 \u0648 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 Ctrl-C \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0645.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/a-repl-for-fat-finger-friendly-typing-pc8\/#%DA%86%D9%87_%DA%86%DB%8C%D8%B2%DB%8C_%D8%A7%DB%8C%D9%86_REPL_%D8%B1%D8%A7_%D8%B4%D8%A7%DB%8C%D8%B3%D8%AA%D9%87_%D8%A7%D9%81%D8%B1%D8%A7%D8%AF%DB%8C_%D8%A8%D8%A7_%D8%AA%D9%85%D8%A7%DB%8C%D9%84%D8%A7%D8%AA_%D8%A7%D9%86%DA%AF%D8%B4%D8%AA%D8%A7%D9%86_%DA%86%D8%A7%D9%82_%DA%A9%D8%B1%D8%AF%D8%9F\" >\u0686\u0647 \u0686\u06cc\u0632\u06cc \u0627\u06cc\u0646 REPL \u0631\u0627 \u0634\u0627\u06cc\u0633\u062a\u0647 \u0627\u0641\u0631\u0627\u062f\u06cc \u0628\u0627 \u062a\u0645\u0627\u06cc\u0644\u0627\u062a \u0627\u0646\u06af\u0634\u062a\u0627\u0646 \u0686\u0627\u0642 \u06a9\u0631\u062f\u061f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/a-repl-for-fat-finger-friendly-typing-pc8\/#%D8%A2%DB%8C%D8%A7_%D9%85%D9%86_%DB%8C%DA%A9_%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1_%D8%AE%D9%88%D8%A7%D9%87%D9%85_%D8%A8%D9%88%D8%AF%D8%9F\" >\u0622\u06cc\u0627 \u0645\u0646 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u062e\u0648\u0627\u0647\u0645 \u0628\u0648\u062f\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/a-repl-for-fat-finger-friendly-typing-pc8\/#%D8%AD%D8%A7%D9%84%D8%AA_%D8%AE%D8%A7%D9%85_%D8%AF%D8%B1%D8%AF%D9%86%D8%A7%DA%A9_%D8%A7%D8%B3%D8%AA\" >\u062d\u0627\u0644\u062a \u062e\u0627\u0645 \u062f\u0631\u062f\u0646\u0627\u06a9 \u0627\u0633\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/a-repl-for-fat-finger-friendly-typing-pc8\/#%D8%AA%D8%B3%D8%AA_%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_%D8%AC%D8%A7%D9%84%D8%A8_%D8%A8%D9%88%D8%AF\" >\u062a\u0633\u062a \u0627\u062f\u063a\u0627\u0645 \u062c\u0627\u0644\u0628 \u0628\u0648\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/a-repl-for-fat-finger-friendly-typing-pc8\/#%D9%86%D9%82%D8%A7%D8%B7_%D9%88%D8%B1%D9%88%D8%AF%DB%8C_%DA%A9%D8%AF_%D9%85%D8%B1%D8%A7_%D8%B5%D8%A8%D8%AD_%D8%A7%D8%B2_%D8%B1%D8%AE%D8%AA%D8%AE%D9%88%D8%A7%D8%A8_%D8%A8%D9%84%D9%86%D8%AF_%D9%85%DB%8C_%DA%A9%D9%86%D8%AF\" >\u0646\u0642\u0627\u0637 \u0648\u0631\u0648\u062f\u06cc \u06a9\u062f \u0645\u0631\u0627 \u0635\u0628\u062d \u0627\u0632 \u0631\u062e\u062a\u062e\u0648\u0627\u0628 \u0628\u0644\u0646\u062f \u0645\u06cc \u06a9\u0646\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/a-repl-for-fat-finger-friendly-typing-pc8\/#%E2%80%9C%D8%B5%D9%81%D8%B1_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C%E2%80%9D_%F0%9F%98%89\" >&#8220;\u0635\u0641\u0631 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc&#8221; \ud83d\ude09<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/a-repl-for-fat-finger-friendly-typing-pc8\/#%D8%AE%D8%AF%D8%A7%D8%AD%D8%A7%D9%81%D8%B8\" >\u062e\u062f\u0627\u062d\u0627\u0641\u0638<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%DA%86%D9%87_%DA%86%DB%8C%D8%B2%DB%8C_%D8%A7%DB%8C%D9%86_REPL_%D8%B1%D8%A7_%D8%B4%D8%A7%DB%8C%D8%B3%D8%AA%D9%87_%D8%A7%D9%81%D8%B1%D8%A7%D8%AF%DB%8C_%D8%A8%D8%A7_%D8%AA%D9%85%D8%A7%DB%8C%D9%84%D8%A7%D8%AA_%D8%A7%D9%86%DA%AF%D8%B4%D8%AA%D8%A7%D9%86_%DA%86%D8%A7%D9%82_%DA%A9%D8%B1%D8%AF%D8%9F\"><\/span>\n<p>  \u0686\u0647 \u0686\u06cc\u0632\u06cc \u0627\u06cc\u0646 REPL \u0631\u0627 \u0634\u0627\u06cc\u0633\u062a\u0647 \u0627\u0641\u0631\u0627\u062f\u06cc \u0628\u0627 \u062a\u0645\u0627\u06cc\u0644\u0627\u062a \u0627\u0646\u06af\u0634\u062a\u0627\u0646 \u0686\u0627\u0642 \u06a9\u0631\u062f\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A2%DB%8C%D8%A7_%D9%85%D9%86_%DB%8C%DA%A9_%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1_%D8%AE%D9%88%D8%A7%D9%87%D9%85_%D8%A8%D9%88%D8%AF%D8%9F\"><\/span>\n<p>  \u0622\u06cc\u0627 \u0645\u0646 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u062e\u0648\u0627\u0647\u0645 \u0628\u0648\u062f\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0646 \u062a\u0645\u0627\u0645 \u0622\u06cc\u0646\u062f\u0647 \u062d\u0631\u0641\u0647 \u0627\u06cc \u0648 \u0645\u0627\u0644\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a\u0646 \u0686\u06cc\u0632\u0647\u0627 &#8220;\u0627\u0632 \u0627\u0628\u062a\u062f\u0627&#8221; \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0647 \u0627\u0645\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u062f\u0631 \u0631\u0648\u0632 \u0627\u0648\u0644 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0628\u0627 \u06cc\u06a9 \u0645\u0639\u0636\u0644 \u0645\u0648\u0627\u062c\u0647 \u0634\u062f\u0645. \u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645 <code>crossterm<\/code> \u0628\u0631\u0627\u06cc \u062a\u0634\u062e\u06cc\u0635 \u06a9\u0644\u06cc\u062f \u062f\u0631 \u062f\u0631\u062c\u0647 \u0627\u0648\u0644 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0628\u06cc\u0646 \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0627\u0633\u062a. \u0647\u0631 \u0686\u0646\u062f \u0635\u0627\u062f\u0642\u0627\u0646\u0647 \u0628\u06af\u0648\u06cc\u0645\u060c <code>crossterm<\/code> \u062e\u06cc\u0644\u06cc \u062e\u06cc\u0644\u06cc \u062e\u0648\u0628 \u0628\u0648\u062f API \u0628\u0635\u0631\u06cc \u0627\u0633\u062a \u0648 \u0645\u0646 \u0628\u0647 \u062e\u0635\u0648\u0635 \u0627\u0632 \u0622\u0646 \u0631\u0627\u0636\u06cc \u0628\u0648\u062f\u0645 <code>KeyModifiers<\/code> (\u06a9\u0647 \u0645\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0631\u0633\u06cc\u062f\u06af\u06cc \u062f\u0627\u0634\u062a\u06cc\u0645 <code>Ctrl-C<\/code>\u060c \u06a9\u0647 \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0631\u062f\u0645 \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a\u060c \u062f\u0631 \u0628\u0627\u0644\u0627 \u0628\u0628\u06cc\u0646\u06cc\u062f).<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AD%D8%A7%D9%84%D8%AA_%D8%AE%D8%A7%D9%85_%D8%AF%D8%B1%D8%AF%D9%86%D8%A7%DA%A9_%D8%A7%D8%B3%D8%AA\"><\/span>\n<p>  \u062d\u0627\u0644\u062a \u062e\u0627\u0645 \u062f\u0631\u062f\u0646\u0627\u06a9 \u0627\u0633\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0627 \u0628\u0647 \u0622\u0646 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0634\u062a\u06cc\u0645 \u062a\u0627 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0627 \u062c\u0627\u0628\u062c\u0627 \u0646\u06a9\u0646\u062f. \u0627\u0645\u0627 \u0644\u0639\u0646\u062a\u06cc\u060c \u0646\u0645\u06cc\u200c\u062f\u0627\u0646\u0633\u062a\u0645 \u06a9\u0647 \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f \u0635\u0641\u062d\u0647 \u0645\u0627 \u0628\u0647 \u06cc\u06a9 \u0645\u0627\u0634\u06cc\u0646 \u062a\u062d\u0631\u06cc\u0631 \u062e\u0631\u0627\u0628 \u062a\u0628\u062f\u06cc\u0644 \u0634\u0648\u062f. \u0628\u0647 \u0647\u0631 \u062d\u0627\u0644\u060c \u0645\u0646 \u0645\u062c\u0628\u0648\u0631 \u0634\u062f\u0645 \u0647\u0645\u0647 \u0631\u0634\u062a\u0647 \u0647\u0627 \u0631\u0627 \u0639\u0627\u062f\u06cc \u06a9\u0646\u0645 \u062a\u0627 \u0642\u0628\u0644 \u0627\u0632 \u0647\u0631 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u062e\u0637 \u062c\u062f\u06cc\u062f\u060c \u06cc\u06a9 \u0628\u0627\u0632\u06af\u0634\u062a \u06a9\u0627\u0644\u0633\u06a9\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u0645. \u06a9\u0647 \u062e\u0648\u0628 \u06a9\u0627\u0631 \u06a9\u0631\u062f \u0648 \u0645\u0646 \u0627\u0632 \u0622\u0646 \u0647\u06cc\u062c\u0627\u0646 \u0632\u062f\u0647 \u0647\u0633\u062a\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight rust\"><code><span class=\"cd\">\/\/\/ When the terminal is in raw mode, we must emit a carriage return in addition to a newline,<\/span>\n<span class=\"cd\">\/\/\/ because that does not happen automatically.<\/span>\n<span class=\"k\">fn<\/span> <span class=\"n\">normalize<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">:<\/span> <span class=\"n\">Display<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"n\">err<\/span><span class=\"p\">:<\/span> <span class=\"n\">T<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">String<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">formatted<\/span> <span class=\"o\">=<\/span> <span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">err<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">if<\/span> <span class=\"nn\">terminal<\/span><span class=\"p\">::<\/span><span class=\"nf\">is_raw_mode_enabled<\/span><span class=\"p\">()<\/span><span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to query terminal raw mode\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">formatted<\/span><span class=\"nf\">.replace<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"<\/span><span class=\"se\">\\n\\r<\/span><span class=\"s\">\"<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n        <span class=\"n\">formatted<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"cd\">\/\/\/ Print command which will normalize newlines + carriage returns before printing.<\/span>\n<span class=\"k\">fn<\/span> <span class=\"n\">print_raw<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">:<\/span> <span class=\"n\">Display<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"n\">val<\/span><span class=\"p\">:<\/span> <span class=\"n\">T<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nd\">print!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"nf\">normalize<\/span><span class=\"p\">(<\/span><span class=\"n\">val<\/span><span class=\"p\">));<\/span>\n    <span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"nf\">stdout<\/span><span class=\"p\">()<\/span><span class=\"nf\">.flush<\/span><span class=\"p\">()<\/span><span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Failed to flush stdout\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B3%D8%AA_%D8%A7%D8%AF%D8%BA%D8%A7%D9%85_%D8%AC%D8%A7%D9%84%D8%A8_%D8%A8%D9%88%D8%AF\"><\/span>\n<p>  \u062a\u0633\u062a \u0627\u062f\u063a\u0627\u0645 \u062c\u0627\u0644\u0628 \u0628\u0648\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062a\u062d\u062a REPL \u0642\u062f\u06cc\u0645\u06cc \u062e\u0648\u062f (\u06a9\u0647 \u062a\u0631\u062c\u06cc\u062d \u062f\u0627\u062f\u0645\u060c \u062f\u0631 \u0628\u0627\u0644\u0627 \u0628\u0628\u06cc\u0646\u06cc\u062f)\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0645 \u0622\u0646 \u0631\u0627 \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0628\u0627\u06cc\u0646\u0631\u06cc \u0648 \u0627\u0631\u0633\u0627\u0644 \u06a9\u062f\u0647\u0627\u06cc \u067e\u0627\u06cc\u062a\u0648\u0646 \u0628\u0647 stdin \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u0645. \u0645\u0646 \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u0645 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0627\u062e\u062a\u0644\u0627\u0641 \u062f\u0631 \u0642\u0631\u0627\u0631\u062f\u0627\u062f\u060c \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0631\u0627\u0633 \u062a\u0631\u0645 \u0627\u0632 \u06a9\u0627\u0631 \u0627\u0641\u062a\u0627\u062f. \u0645\u0646 \u0635\u0627\u062f\u0642\u0627\u0646\u0647 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0645 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0645\u0644 \u062a\u0648\u0636\u06cc\u062d \u062f\u0647\u0645\u060c \u0627\u0645\u0627 event::read() \u062f\u0631 \u062a\u0633\u062a \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647\u200c\u0633\u0627\u0632\u06cc \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0628\u0627 \u0648\u0631\u0648\u062f\u06cc stdin \u0628\u0647 \u067e\u0627\u06cc\u0627\u0646 \u0645\u06cc\u200c\u0631\u0633\u062f \u0648 \u0634\u06a9\u0633\u062a \u0645\u06cc\u200c\u062e\u0648\u0631\u062f. \u067e\u0633 \u0645\u0633\u062e\u0631\u0647 \u0627\u0634 \u06a9\u0631\u062f\u0645<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight rust\"><code><span class=\"k\">pub<\/span> <span class=\"k\">trait<\/span> <span class=\"n\">TerminalIO<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">fn<\/span> <span class=\"nf\">read_event<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">mut<\/span> <span class=\"k\">self<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Event<\/span><span class=\"p\">,<\/span> <span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"n\">Error<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">;<\/span>\n    <span class=\"k\">fn<\/span> <span class=\"n\">write<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">:<\/span> <span class=\"n\">Display<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">mut<\/span> <span class=\"k\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">output<\/span><span class=\"p\">:<\/span> <span class=\"n\">T<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"p\">()<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">;<\/span>\n    <span class=\"k\">fn<\/span> <span class=\"n\">writeln<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">:<\/span> <span class=\"n\">Display<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">mut<\/span> <span class=\"k\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">output<\/span><span class=\"p\">:<\/span> <span class=\"n\">T<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"p\">()<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"cd\">\/\/\/ A mock for testing that doesn't use `crossterm`.<\/span>\n<span class=\"k\">struct<\/span> <span class=\"n\">MockTerminalIO<\/span> <span class=\"p\">{<\/span>                                                        \n    <span class=\"cd\">\/\/\/ Predefined events for testing<\/span>\n    <span class=\"n\">events<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Event<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\n\n    <span class=\"cd\">\/\/\/ Captured output for assertions<\/span>\n    <span class=\"n\">output<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"nb\">String<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">impl<\/span> <span class=\"n\">TerminalIO<\/span> <span class=\"k\">for<\/span> <span class=\"n\">MockTerminalIO<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">fn<\/span> <span class=\"nf\">read_event<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">mut<\/span> <span class=\"k\">self<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Event<\/span><span class=\"p\">,<\/span> <span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"n\">Error<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">if<\/span> <span class=\"k\">self<\/span><span class=\"py\">.events<\/span><span class=\"nf\">.is_empty<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"nn\">Error<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"nn\">ErrorKind<\/span><span class=\"p\">::<\/span><span class=\"n\">Other<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"No more events\"<\/span><span class=\"p\">))<\/span>\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n            <span class=\"c1\">\/\/ remove from the front (semantically similar to VecDequeue::pop_front).<\/span>\n            <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"k\">self<\/span><span class=\"py\">.events<\/span><span class=\"nf\">.remove<\/span><span class=\"p\">(<\/span><span class=\"mi\">0<\/span><span class=\"p\">))<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">fn<\/span> <span class=\"n\">write<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">:<\/span> <span class=\"n\">Display<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">mut<\/span> <span class=\"k\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">output<\/span><span class=\"p\">:<\/span> <span class=\"n\">T<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"p\">()<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">self<\/span><span class=\"py\">.output<\/span><span class=\"nf\">.push<\/span><span class=\"p\">(<\/span><span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">output<\/span><span class=\"p\">));<\/span>\n        <span class=\"nf\">Ok<\/span><span class=\"p\">(())<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">fn<\/span> <span class=\"n\">writeln<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"p\">:<\/span> <span class=\"n\">Display<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">mut<\/span> <span class=\"k\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">output<\/span><span class=\"p\">:<\/span> <span class=\"n\">T<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"p\">()<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">self<\/span><span class=\"nf\">.write<\/span><span class=\"p\">(<\/span><span class=\"n\">output<\/span><span class=\"p\">)<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">self<\/span><span class=\"nf\">.write<\/span><span class=\"p\">(<\/span><span class=\"s\">\"<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">)<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\n        <span class=\"nf\">Ok<\/span><span class=\"p\">(())<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06a9\u0647 \u0645\u0646\u062c\u0631 \u0628\u0647 \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f\u0646 \u06a9\u0644 \u0645\u0648\u0636\u0648\u0639 \u0628\u0647 \u06cc\u06a9 \u0622\u0632\u0645\u0648\u0646 \u0648\u0627\u062d\u062f \u0634\u062f\u061f \u0631\u0627\u0633\u062a\u0634 \u0645\u0646 \u0646\u0645\u06cc \u062f\u0627\u0646\u0645. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647\u060c \u0627\u06af\u0631 \u0627\u0644\u0641) \u06cc\u06a9 \u0628\u0627\u06cc\u0646\u0631\u06cc \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0628\u0627\u06cc\u0646\u0631\u06cc \u062f\u06cc\u06af\u0631 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u06a9\u0646\u0645\u060c \u06cc\u0627 2) \u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u0645 \/ \u06cc\u06a9 \u067e\u0648\u0631\u062a \u0631\u0627 \u0628\u0627\u0632 \u06a9\u0646\u0645 \/ \u062f\u0631 \u06cc\u06a9 \u0633\u0648\u06a9\u062a \u062f\u0631 \u062f\u0627\u062e\u0644 \u06cc\u06a9 \u062a\u0633\u062a \u06af\u0648\u0634 \u062f\u0647\u0645\u060c \u0622\u0646 \u0631\u0627 \u062a\u0633\u062a \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u0646\u0627\u0645\u0645. \u0627\u06af\u0631 \u062a\u0639\u0631\u06cc\u0641 \u062f\u06cc\u06af\u0631\u06cc \u062f\u0627\u0631\u06cc\u062f \u06a9\u0647 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u062f\u0631 \u0646\u0638\u0631\u0627\u062a \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u062a\u0639\u0631\u06cc\u0641 \u0646\u06a9\u0646\u06cc\u062f \u0632\u06cc\u0631\u0627 TBH \u0622\u0632\u0627\u0631\u062f\u0647\u0646\u062f\u0647 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u200c\u0631\u0633\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight rust\"><code><span class=\"cd\">\/\/\/ Run the complete flow, from input code string to return value string. If you need any Ctrl<\/span>\n<span class=\"cd\">\/\/\/ modifiers, do not use this!<\/span>\n<span class=\"k\">fn<\/span> <span class=\"nf\">run_and_return<\/span><span class=\"p\">(<\/span><span class=\"n\">input<\/span><span class=\"p\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">String<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">terminal<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">MockTerminalIO<\/span><span class=\"p\">::<\/span><span class=\"nf\">from_str<\/span><span class=\"p\">(<\/span><span class=\"n\">input<\/span><span class=\"p\">);<\/span>\n    <span class=\"nn\">Repl<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">()<\/span><span class=\"nf\">.run<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">mut<\/span> <span class=\"n\">terminal<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">terminal<\/span><span class=\"nf\">.return_val<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">fn<\/span> <span class=\"nf\">string_to_events<\/span><span class=\"p\">(<\/span><span class=\"n\">input<\/span><span class=\"p\">:<\/span> <span class=\"o\">&amp;<\/span><span class=\"nb\">str<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Event<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">input<\/span>\n        <span class=\"nf\">.chars<\/span><span class=\"p\">()<\/span>\n        <span class=\"nf\">.map<\/span><span class=\"p\">(|<\/span><span class=\"n\">c<\/span><span class=\"p\">|<\/span> <span class=\"p\">{<\/span>\n            <span class=\"k\">let<\/span> <span class=\"n\">key_code<\/span> <span class=\"o\">=<\/span> <span class=\"k\">match<\/span> <span class=\"n\">c<\/span> <span class=\"p\">{<\/span>\n                <span class=\"sc\">'\\n'<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"nn\">KeyCode<\/span><span class=\"p\">::<\/span><span class=\"n\">Enter<\/span><span class=\"p\">,<\/span>\n                <span class=\"n\">_<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"nn\">KeyCode<\/span><span class=\"p\">::<\/span><span class=\"nf\">Char<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">),<\/span>\n            <span class=\"p\">};<\/span>\n            <span class=\"nn\">Event<\/span><span class=\"p\">::<\/span><span class=\"nf\">Key<\/span><span class=\"p\">(<\/span><span class=\"nn\">KeyEvent<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">key_code<\/span><span class=\"p\">,<\/span> <span class=\"nn\">KeyModifiers<\/span><span class=\"p\">::<\/span><span class=\"n\">NONE<\/span><span class=\"p\">))<\/span>\n        <span class=\"p\">})<\/span>\n        <span class=\"nf\">.collect<\/span><span class=\"p\">()<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u0633\u0646\u0627\u0631\u06cc\u0648\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0631\u0627 \u0628\u0627 \u062f\u06cc\u06af \u0628\u062e\u0627\u0631 \u0646\u0633\u0628\u062a\u0627\u064b \u06a9\u0645\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight rust\"><code><span class=\"nd\">#[test]<\/span>\n<span class=\"k\">fn<\/span> <span class=\"nf\">test_repl_name_error<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">return_val<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">run_and_return<\/span><span class=\"p\">(<\/span><span class=\"s\">\"e<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"nd\">assert!<\/span><span class=\"p\">(<\/span><span class=\"n\">return_val<\/span><span class=\"nf\">.contains<\/span><span class=\"p\">(<\/span><span class=\"s\">\"NameError: name 'e' is not defined\"<\/span><span class=\"p\">));<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nd\">#[test]<\/span>\n<span class=\"k\">fn<\/span> <span class=\"nf\">test_repl_expr<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">third_from_last<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">run_and_return<\/span><span class=\"p\">(<\/span><span class=\"s\">\"12345<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"nd\">assert_eq!<\/span><span class=\"p\">(<\/span><span class=\"n\">third_from_last<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"12345\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nd\">#[test]<\/span>\n<span class=\"k\">fn<\/span> <span class=\"nf\">test_repl_statement<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">return_val<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">run_and_return<\/span><span class=\"p\">(<\/span><span class=\"s\">\"a = 5.5<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"c1\">\/\/ empty string because a statement does not have a return value<\/span>\n    <span class=\"nd\">assert_eq!<\/span><span class=\"p\">(<\/span><span class=\"n\">return_val<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nd\">#[test]<\/span>\n<span class=\"k\">fn<\/span> <span class=\"nf\">test_repl_function<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">code<\/span> <span class=\"o\">=<\/span> <span class=\"s\">r#\"\ndef foo():\n    a = 10\n    return 2 * a\n\nfoo()\n\"#<\/span><span class=\"p\">;<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">return_val<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">run_and_return<\/span><span class=\"p\">(<\/span><span class=\"n\">code<\/span><span class=\"p\">);<\/span>\n    <span class=\"nd\">assert_eq!<\/span><span class=\"p\">(<\/span><span class=\"n\">return_val<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"20\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nd\">#[test]<\/span>\n<span class=\"k\">fn<\/span> <span class=\"nf\">test_repl_ctrl_c<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">events<\/span> <span class=\"o\">=<\/span> <span class=\"nf\">string_to_events<\/span><span class=\"p\">(<\/span><span class=\"s\">\"123456789<\/span><span class=\"se\">\\n<\/span><span class=\"s\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">ctrl_c<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">Event<\/span><span class=\"p\">::<\/span><span class=\"nf\">Key<\/span><span class=\"p\">(<\/span><span class=\"nn\">KeyEvent<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"nn\">KeyCode<\/span><span class=\"p\">::<\/span><span class=\"nf\">Char<\/span><span class=\"p\">(<\/span><span class=\"sc\">'c'<\/span><span class=\"p\">),<\/span> <span class=\"nn\">KeyModifiers<\/span><span class=\"p\">::<\/span><span class=\"n\">CONTROL<\/span><span class=\"p\">));<\/span>\n    <span class=\"n\">events<\/span><span class=\"nf\">.insert<\/span><span class=\"p\">(<\/span><span class=\"mi\">4<\/span><span class=\"p\">,<\/span> <span class=\"n\">ctrl_c<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">terminal<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">MockTerminalIO<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">events<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"nn\">Repl<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">()<\/span><span class=\"nf\">.run<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"k\">mut<\/span> <span class=\"n\">terminal<\/span><span class=\"p\">);<\/span>\n    <span class=\"nd\">assert_eq!<\/span><span class=\"p\">(<\/span><span class=\"n\">terminal<\/span><span class=\"nf\">.return_val<\/span><span class=\"p\">(),<\/span> <span class=\"s\">\"56789\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%86%D9%82%D8%A7%D8%B7_%D9%88%D8%B1%D9%88%D8%AF%DB%8C_%DA%A9%D8%AF_%D9%85%D8%B1%D8%A7_%D8%B5%D8%A8%D8%AD_%D8%A7%D8%B2_%D8%B1%D8%AE%D8%AA%D8%AE%D9%88%D8%A7%D8%A8_%D8%A8%D9%84%D9%86%D8%AF_%D9%85%DB%8C_%DA%A9%D9%86%D8%AF\"><\/span>\n<p>  \u0646\u0642\u0627\u0637 \u0648\u0631\u0648\u062f\u06cc \u06a9\u062f \u0645\u0631\u0627 \u0635\u0628\u062d \u0627\u0632 \u0631\u062e\u062a\u062e\u0648\u0627\u0628 \u0628\u0644\u0646\u062f \u0645\u06cc \u06a9\u0646\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0627\u0646\u06af\u06cc\u0632\u0647\u200c\u0647\u0627\u06cc \u0645\u0646 \u062f\u0631 \u0627\u0641\u0632\u0648\u062f\u0646 \u06cc\u06a9 REPL \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0628\u0648\u062f \u06a9\u0647 \u0645\u0639\u062a\u0642\u062f\u0645 \u0648\u0642\u062a\u06cc \u06cc\u06a9 \u0648\u0631\u0648\u062f\u06cc \u062f\u0648\u0645 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c \u06a9\u062f \u062e\u0648\u062f \u0631\u0627 \u0628\u0647\u062a\u0631 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f. \u0634\u0645\u0627 \u0627\u0633\u0627\u0633\u0627\u064b \u062f\u0648\u0645\u06cc\u0646 \u06a9\u0627\u0631\u0628\u0631 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062e\u0648\u062f \u0647\u0633\u062a\u06cc\u062f\u060c \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0628\u0647 \u062f\u0631\u06a9 \u06cc\u06a9 \u0627\u0646\u062a\u0632\u0627\u0639 \u06a9\u0627\u0645\u0644 \u06a9\u0647 \u0647\u0645\u0647 \u062f\u0631 \u062c\u0633\u062a\u062c\u0648\u06cc \u0622\u0646 \u0628\u0647 \u0635\u0641\u062d\u0647\u200c\u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062e\u0648\u062f \u0645\u06cc\u200c\u067e\u0631\u062f\u0627\u0632\u06cc\u0645\u060c \u0646\u0632\u062f\u06cc\u06a9\u200c\u062a\u0631 \u0634\u0648\u06cc\u062f. \u0645\u0646\u0638\u0648\u0631\u0645 \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u062c\u062f\u06cc \u0627\u0633\u062a.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E2%80%9C%D8%B5%D9%81%D8%B1_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C%E2%80%9D_%F0%9F%98%89\"><\/span>\n<p>  &#8220;\u0635\u0641\u0631 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc&#8221; \ud83d\ude09<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>REPL \u0627\u06a9\u0646\u0648\u0646 \u067e\u0634\u062a \u067e\u0631\u0686\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0631\u0627\u0647\u06cc \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0633\u062a. \u0645\u0646 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u062a\u0641\u0633\u06cc\u0631 \u06a9\u062f \u067e\u0627\u06cc\u062a\u0648\u0646 \u0631\u0627 \u0628\u0627 \u06a9\u0645\u06a9 \u062c\u0639\u0628\u0647\u200c\u0647\u0627\u06cc \u0634\u062e\u0635 \u062b\u0627\u0644\u062b \u0632\u0646\u062f\u0647 \u0646\u06af\u0647 \u0645\u06cc\u200c\u062f\u0627\u0631\u0645\u060c \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0639\u0646\u06cc \u06a9\u0647 crossterm \u06cc\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627 \u0628\u0627\u0634\u062f \u06cc\u0627 \u06cc\u06a9 \u067e\u0631\u0686\u0645 \u0648\u06cc\u0698\u06af\u06cc \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u0645. \u062d\u0627\u0644\u0627\u060c \u0627\u06af\u0631 \u0628\u062f\u0648\u0646 \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 REPL \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u062f \u0648 \u00ab\u0645\u0645\u0641\u06cc\u0633\u00bb \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f\u060c \u0645\u0624\u062f\u0628\u0627\u0646\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0645\u06cc \u06af\u0648\u06cc\u062f \u00ab\u0633\u0627\u062e\u062a \u0627\u0634\u062a\u0628\u0627\u0647\u060c \u0627\u062d\u0645\u0642\u0627\u0646\u0647\u00bb.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AE%D8%AF%D8%A7%D8%AD%D8%A7%D9%81%D8%B8\"><\/span>\n<p>  \u062e\u062f\u0627\u062d\u0627\u0641\u0638<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>REPL \u0627\u06cc\u0646\u062c\u0627\u0633\u062a. \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f. \u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u062e\u0631\u06cc\u062f\u060c \u0628\u0647 \u0646\u0638\u0631 \u06cc\u06a9 \u06a9\u0644\u0627\u0647\u0628\u0631\u062f\u0627\u0631\u06cc \u0627\u0633\u062a. \u062e\u0648\u0628 \u0628\u0627\u0634 \u0648 \u0632\u0648\u062f \u062d\u0631\u0641 \u0628\u0632\u0646<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0645\u0641\u0633\u0631 \u067e\u0627\u06cc\u062a\u0648\u0646 \u0645\u0646\u060c \u0645\u0645\u0641\u06cc\u0633\u060c \u062f\u0627\u0631\u0627\u06cc \u06cc\u06a9 REPL (\u062d\u0644\u0642\u0647 \u062e\u0648\u0627\u0646\u062f\u0646-\u0627\u06cc\u0648\u0627\u0644-\u0686\u0627\u067e) \u0627\u0633\u062a! \u0627\u06cc\u0646 \u06cc\u06a9 \u062e\u0628\u0631 \u0642\u062f\u06cc\u0645\u06cc \u0627\u0633\u062a. \u062a\u0627 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u062c\u063a\u062f \u067e\u06cc\u0631 \u062f\u0627\u0646\u0627 \u0647\u06cc\u0686 \u0627\u0634\u062a\u0628\u0627\u0647\u06cc \u0645\u0631\u062a\u06a9\u0628 \u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u062f\u0644\u062e\u0648\u0627\u0647 \u062a\u0641\u0633\u06cc\u0631 \u06a9\u0646\u06cc\u062f. \u0628\u0627 \u0641\u0631\u0636 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0631\u06af\u0632 \u0646\u062e\u0648\u0627\u0633\u062a\u06cc\u062f \u06cc\u06a9 \u0639\u0628\u0627\u0631\u062a \u0631\u0627 \u062f\u0648 \u0628\u0627\u0631 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f\u060c &hellip;<\/p>\n","protected":false},"author":2,"featured_media":81003,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-81002","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/81002","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=81002"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/81002\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/81003"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=81002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=81002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=81002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}