我真的喜從LRtHW學習,我卡住了....瞭解紅寶石堅硬方式#41
我有這樣的程序:
require 'open-uri'
WORD_URL = "http://learncodethehardway.org/words.txt"
WORDS = []
PHRASES = {
"class ### < ###\nend" => "Make a class named ### that is-a ###.",
"class ###\n\tdef initialize(@@@)\n\tend\nend" => "class ### has-a initialize that takes @@@ parameters.",
"class ###\n\tdef ***(@@@)\n\tend\nend" =>"class ### has-a function named *** that takes @@@ parameters.",
"*** = ###.new()" => "Set *** to an instance of class ###.",
"***.***(@@@)" => "From *** get the *** function, and call it with parameters @@@.",
"***.*** = '***'" => "From *** get the *** attribute and set it to '***'."
}
PHRASE_FIRST = ARGV[0] == "english"
open(WORD_URL) do |f|
f.each_line {|word| WORDS.push(word.chomp)}
end
def craft_names(rand_words, snippet, pattern, caps=false)
names = snippet.scan(pattern).map do
word = rand_words.pop()
caps ? word.capitalize : word
end
return names * 2
end
def craft_params(rand_words,snippet,pattern)
names = (0...snippet.scan(pattern).length).map do
param_count = rand(3) + 1
params = (0...param_count).map {|x| rand_words.pop()}
params.join(', ')
end
return names * 2
end
def convert(snippet, phrase)
rand_words = WORDS.sort_by {rand}
class_names = craft_names(rand_words, snippet, /###/, caps=true)
other_names = craft_names(rand_words, snippet,/\*\*\*/)
param_names = craft_params(rand_words, snippet, /@@@/)
results = []
for sentence in [snippet, phrase]
#fake class name, also copies sentence
result = sentence.gsub(/###/) {|x| class_names.pop}
#fake other names
result.gsub!(/\*\*\*/) {|x| other_names.pop}
#fake parameter list
result.gsub!(/@@@/) {|x| param_names.pop}
results.push(result)
end
return results
end
# keep going until they hit CTRL-D
loop do
snippets = PHRASES.keys().sort_by { rand }
for snippet in snippets
phrase = PHRASES[snippet]
question, answer = convert(snippet, phrase)
if PHRASE_FIRST
question, answer = answer, question
end
print question, "\n\n> "
odp = gets.chomp
if odp == "exit"
exit(0)
end
#exit(0) unless STDIN.gets
puts "\nANSWER: %s\n\n" % answer
end
end
我明白大多數代碼,但我有一個問題:
for sentence in [snippet, phrase]
我知道這是一個「for」循環,它創建了一個「句」變量,但如何循環知道,它需要一個鍵和散列值來查找「PHRASES」
我的第二個「牆」是:
question, answer = convert(snippet, phrase)
它看起來就像創建和分配「問題」和「答案變量‘摘要‘和‘短語’參數轉換’與方法’...它又如何將一個「問題」分配給一個鍵並回答一個值。
我知道,這可能是很簡單,但對於現在的塊我的腦海:(
首先讓我們從拼寫更正開始。太多了。 – Bala