我在Ruby中使用Hash,只是检查某个单词是否在“pairs”类中并替换它们。最初我在python中编码并希望将其转换为我不熟悉的ruby。这是我写的ruby代码。
import sys
pairs = {'butter' => 'flies', 'cheese' => 'wheel', 'milk'=> 'expensive'}
for line in sys.stdin:
line_words = line.split(" ")
for word in line_words:
if word in pairs
line = line.gsub!(word, pairs[word])
puts line
显示以下错误
syntax error, unexpected kIN, expecting kTHEN or ':' or '\n' or ';'
if word in pairs
^
虽然下面是正确的原始python脚本:
import sys
pairs = dict()
pairs = {'butter': 'flies', 'cheese': 'wheel', 'milk': 'expensive'}
for line in sys.stdin:
line = line.strip()
line_words = line.split(" ")
for word in line_words:
if word in pairs:
line = line.replace(word ,pairs[word])
print line
是因为“import sys”还是“Indentation”?
答案 0 :(得分:1)
试试这个:
pairs = {'butter' => 'flies', 'cheese' => 'wheel', 'milk'=> 'expensive'}
line = ARGV.join(' ').split(' ').map do |word|
pairs.include?(word) ? pairs[word] : word
end.join(" ")
puts line
这将遍历传递给脚本的每个项目,并返回单词或替换单词,由空格连接。
答案 1 :(得分:0)
for
通常不用于Ruby,因为它有一些不寻常的范围。
以下是我的写作方式:
pairs = { "butter" => "flies", "cheese" => "wheel", "milk" => "expensive" }
until $stdin.eof?
line = $stdin.gets
pairs.each do |from, to|
line = line.gsub(from, to)
end
line
end
Ruby中不存在 import
,所以不应该存在。你还必须在Ruby中用end
“关闭”每个块,仅仅缩进是不够的(缩进对Ruby没有任何意义,尽管你仍然应该保留它以便于阅读)。