如何将此代码从python转换为ruby?

时间:2017-05-29 13:50:47

标签: python ruby

我正在尝试将一些代码从Python翻译成Ruby,但我仍然坚持使用python中的这一个函数:

def notNoneOf(a, b):
  return a is None and b or a

我对ruby的天真翻译是这样的:

def notNoneOf(a, b):
  return a.nil? and b || a
end

但这给了我一个void value expression

python代码中函数的用法如下:

for m in re.finditer('<input.*?name=(?:"([^"]*)"|([^" >]*)) value=(?:"([^"]*)"|([^" >]*))[^>]*>', data):
    formData[notNoneOf(m.group(1), m.group(2))] = notNoneOf(m.group(3), m.group(4))

通过使用python REPL中的代码,看起来这个ruby代码应该可以工作:

def notNoneOf(a, b):
  return a || b
end

但是,这似乎让我错过了一些案例?

python中的这个测试让它看起来有点不同:

>>> a = None
>>> b = None
>>> notNoneOf(a,b)
>>> 

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:2)

查看enter image description here,看起来是python代码:

a is None and b or a

在逻辑上等同于*:

(!a && b) || a

*请参阅下面的评论 - 它不是相当等效,但解释仍然适用。

然而,这是一个毫无意义的过度复杂化。这再次相当于更简单的方法:

a || b

轻微的赠品是notNoneOf的奇怪功能名称。一个更明智的函数名称是eitherOf - 这使得上面的实现看起来立即正确。

所以在ruby中,我只想把它写成:

def either(a, b)
  a || b
end

(或者,更可能的是,甚至根本没有把它抽象成一个单独的方法!!)

然而,通过树木看到木头,我不会继续&#34;翻译&#34;这两个语言之间的代码广告verbium。 python代码看起来非常混乱,容易出错;它python operator precedence - 这只是在寻找麻烦!

很多更好的解决方案是使用HTML解析器(例如using a regular expression to parse HTML)来编写它。你可以写代码如下:

doc = Nokogiri::HTML(data)
doc.css('input').each do |input|
  puts input.name
  puts input.value
end

确切了解python代码的作用,并尝试复制其行为而不是实现