Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby&;将python转换为ruby_Python_Ruby_Dictionary - Fatal编程技术网

Ruby&;将python转换为ruby

Ruby&;将python转换为ruby,python,ruby,dictionary,Python,Ruby,Dictionary,我在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 i

我在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 
是因为“导入系统”还是“缩进”?

尝试以下方法:

pairs = {'butter' => 'flies', 'cheese' => 'wheel', 'milk'=> 'expensive'}

line = ARGV.join(' ').split(' ').map do |word|
  pairs.include?(word) ? pairs[word] : word
end.join(" ")

puts line
这将循环传递到脚本的每个项目,并返回单词或替换单词,并用空格连接。

尝试以下操作:

pairs = {'butter' => 'flies', 'cheese' => 'wheel', 'milk'=> 'expensive'}

line = ARGV.join(' ').split(' ').map do |word|
  pairs.include?(word) ? pairs[word] : word
end.join(" ")

puts line

这将循环传递给脚本的每个项目,返回单词或替换单词,并用空格连接。

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

import
在Ruby中不存在,所以不应该存在。在Ruby中,您还必须使用
end
来“关闭”每个块,单靠缩进是不够的(缩进对Ruby没有任何意义,尽管为了可读性,您仍然应该保留缩进)。

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

import
在Ruby中不存在,所以不应该存在。在Ruby中,您还必须使用
end
来“关闭”每个块,单靠缩进是不够的(缩进对Ruby来说并不意味着什么,尽管为了可读性,您仍然应该保留缩进)。

谢谢kardeiz!Ruby“放置”的行是什么类型的,它是数组吗?因为它逐行打印单个单词,我想知道他们是否将行拆分两次。如果我还想写一整行,我该怎么办?line.join(“”)无法解决此问题。您好!我在输入中加引号时发现了一个差异。例如,当我尝试输入“this is butter”时,它会打印“this is butter”。如果是“this is butter”,则输出将是“this is flies”。什么原因造成了这种差异?当我将代码放在服务器上时,出现了一个名为“未定义的方法`map'(this is butter:String(NoMethodError)”)的错误。我稍微修改了脚本,以便您可以将要转换的字符串作为一个参数序列或一个参数(用引号括起来):
ARGV.join(“”).split(“”)
,它用空格连接arg数组,然后在空间上拆分。我不确定您的第二个问题:调用脚本的上下文是什么?您的错误表明
ARGV
被解释为字符串,但
ARGV
应始终是数组(即使为空)。是!实际上内容是ARGV[2],所以我认为它是一个字符串?谢谢kardeiz!Ruby“放置”的行是什么类型的,它是数组吗?因为它逐行打印单个单词,我想知道他们是否将行拆分两次。如果我还想写一整行,我该怎么办?line.join(“”)无法解决此问题。您好!我在输入中加引号时发现了一个差异。例如,当我尝试输入“this is butter”时,它会打印“this is butter”。如果是“this is butter”,则输出将是“this is flies”。什么原因造成了这种差异?当我将代码放在服务器上时,出现了一个名为“未定义的方法`map'(this is butter:String(NoMethodError)”)的错误。我稍微修改了脚本,以便您可以将要转换的字符串作为一个参数序列或一个参数(用引号括起来):
ARGV.join(“”).split(“”)
,它用空格连接arg数组,然后在空间上拆分。我不确定您的第二个问题:调用脚本的上下文是什么?您的错误表明
ARGV
被解释为字符串,但
ARGV
应始终是数组(即使为空)。是!实际上内容是ARGV[2],所以我认为它是一个字符串?