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

构架

我正在尝试将一些代码从Python转换为Ruby,但是我被困在python中的一个函数上:

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

我天真的将红宝石翻译成这样:

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)
>>> 

任何帮助表示赞赏。

汤姆·洛德

看一下python运算符的优先级,似乎python代码:

a is None and b or a

在逻辑上等效于*:

(!a && b) || a

*请参阅下面的评论-它并不完全等效,但说明仍然适用。

但是,这毫无意义。同样,这等效于更简单的方法:

a || b

略带赠品的是的怪异函数名称notNoneOf一个更合理的函数名称是eitherOf-使上面的实现立即正确。

因此在红宝石中,我将其写为:

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

(或者,更可能根本不用将其抽象为单独的方法!)


但是,我看到树木穿过树林,就不会继续在两种语言的副词之间“翻译”此代码。python代码看起来非常混乱并且容易出错;使用正则表达式解析HTML-这只是自找麻烦!

一个更好的办法是用HTML解析器如写这个Nokogiri您可以编写类似以下内容的代码:

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

弄清楚python代码的作用,并尝试复制其行为而不是其实现

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章