YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Japanese subtitles

← 05-14 Record Calls

Get Embed Code
2 Languages

Showing Revision 2 created 06/24/2014 by Fran Ontanaya.

  1. この時点でプログラムにとって必要なデータとして
  2. 単にファイルを移出することで
    静的データを再現するという方法を確認できました
  3. ユーザインタラクションの記録と
    リプレイ方法を確認しました
  4. しかしこれらはすべて同等クラスの入力の事例です
  5. プログラムとその環境間のインタラクションです
  6. まとめてこのインタラクションを記録し
  7. リプレイできるのかどうかが問題です
  8. プログラムは関数呼び出しによって
    その環境と対話しています
  9. データにアクセスするために関数を呼び出します
  10. ユーザインタラクションまたは環境由来のものすべてに
  11. アクセスするために関数を呼び出します
  12. つまり できるのは関数呼び出しを記録し
    リプレイすることです
  13. 1つのメカニズムを持つことで
  14. プログラムと環境間のあらゆるインタラクションを
    取り込むことができます
  15. ログにあるすべての関数呼び出しを
    パラメータで記録します
  16. その後それをリプレイします
  17. まずは記録から始めましょう
  18. 実行の1つ1つのフレームにアクセスできる時の
  19. トレース関数をすでに確認しています
  20. 各フレームにはすべてのローカル変数だけでなく
  21. 関数名も含まれています
  22. メソッドが呼び出された
    ローカル変数のリストが
  23. 実際は関数に渡す引数のリストになります
  24. たとえばtraceit関数を設定したら
  25. 常にすべての行で呼び出されます
  26. 関数が呼び出された時も呼び出されます
  27. この場合ここにある引数eventは
    呼び出しの値を有しています
  28. もしこれが起きたら現在の関数名を出力し
  29. ローカル変数を出力します
  30. これが引数になります
  31. これが機能するか試してみましょう
  32. ここで確認するのはコードのここと同じ値で
  33. 引数sのremove_html_markup関数を呼び出すことです
  34. 引数リストだけでなく関数名も
    コードに変換し直せる何かに
  35. 変換したいと思います
  36. 的確にこのような感じにしてください
  37. これをまさに関数呼び出しのような文字列に
    変換した場合
  38. これをPythonのeval関数に渡すことができます
  39. これは文字列を取得し それをコードと理解します
  40. これはあとでリプレイに使えそうです
  41. 文字列が変換され
    結果が出力されているのがわかりますね
  42. これが引数であるローカル変数の
  43. 出力を処理する関数です
  44. 関数内のそれぞれのパラメータのポジションが
    分からないので
  45. 代わりに名前付き引数を出力したものを使います
  46. つまりname=valueを出力します
  47. これはコンマで区切られます
  48. ここで再びこのパラメータで
    HTMLタグを削除します
  49. すべてがうまくいったらtraceit関数です
  50. 正しい引数でこの呼び出しを出力します
  51. これがまさに起きることです
  52. 引数sでremove_html_markup関数を出力しました
  53. ここにあるように文字列<b>foo</b>になります
  54. ただしポジションのパラメータではなく
  55. 名前付きパラメータがあることは除きます
  56. Python関数がある限り
  57. 同様のメカニズム
    トレースや再帰呼び出しにも応用できます
  58. たとえばsquare_root(2)を呼び出した場合
  59. トレースされ出力されます
  60. ここで確認できるようにxの平方根の値は2です
  61. 変数があり そしてすべての呼び出しを
  62. 保存していたと仮定しましょう
  63. コードが実行されている間にすぐに記録すれば
    これができます
  64. またはファイル内のこれを保存し
    ファイルにこれを読み戻すことができます
  65. それではすべての呼び出しを評価するコードを
    書いてください
  66. まずこの呼び出し 次にこちらの呼び出し
  67. 呼び出し1つずつの適切な結果を出力します
  68. 出力は"関数(引数)=戻り値"の形式です
  69. さあどうぞ