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 如何将此代码缩减为一行?_Ruby_Nokogiri - Fatal编程技术网

Ruby 如何将此代码缩减为一行?

Ruby 如何将此代码缩减为一行?,ruby,nokogiri,Ruby,Nokogiri,我用的是Nokogiri 我有下面的代码,它用标准的撇号代替了撇号 def replace_apostrophe(nokogiri_xml_doc) nokogiri_xml_doc.xpath('//text()').each {|node| node.content = node.content.gsub(/\b'|’|‛|⸂|⸄|⸌|⸜\b/, "'")} nokogiri_xml_doc end 我想把这个方法减少到一行,但我不知道如何做到这一点 有什么想法吗?老实说,我宁愿

我用的是Nokogiri

我有下面的代码,它用标准的撇号代替了撇号

def replace_apostrophe(nokogiri_xml_doc)
  nokogiri_xml_doc.xpath('//text()').each {|node| node.content = node.content.gsub(/\b'|’|‛|⸂|⸄|⸌|⸜\b/, "'")}
  nokogiri_xml_doc 
end
我想把这个方法减少到一行,但我不知道如何做到这一点


有什么想法吗?

老实说,我宁愿把它分成两行;将其压缩成一行可能是“聪明的”,但这会使代码更难阅读

但是,如果您真的想让它成为一行程序,您可以使用
Object#tap

def replace_apostrophe(nokogiri_xml_doc)
  nokogiri_xml_doc.tap { |doc| doc.xpath('//text()').each { |node| node.content = node.content.gsub(/\b'|’|‛|⸂|⸄|⸌|⸜\b/, "'") } }
end


有关有用的信息,请参阅评论。

老实说,我宁愿把它留为两行;将其压缩成一行可能是“聪明的”,但这会使代码更难阅读

但是,如果您真的想让它成为一行程序,您可以使用
Object#tap

def replace_apostrophe(nokogiri_xml_doc)
  nokogiri_xml_doc.tap { |doc| doc.xpath('//text()').each { |node| node.content = node.content.gsub(/\b'|’|‛|⸂|⸄|⸌|⸜\b/, "'") } }
end

有关有用信息,请参见注释

我想把这个方法减少到一行,但我不知道如何做到这一点

您始终可以使用分号或关键字替换换行符,并编写任意代码,无论一行代码有多复杂:

def replace_apostrophe(nokogiri_xml_doc) nokogiri_xml_doc.xpath('//text()').each {|node| node.content = node.content.gsub(/\b'|’|‛|⸂|⸄|⸌|⸜\b/, "'")}; nokogiri_xml_doc end
但是,这真的更好吗

我想把这个方法减少到一行,但我不知道如何做到这一点

您始终可以使用分号或关键字替换换行符,并编写任意代码,无论一行代码有多复杂:

def replace_apostrophe(nokogiri_xml_doc) nokogiri_xml_doc.xpath('//text()').each {|node| node.content = node.content.gsub(/\b'|’|‛|⸂|⸄|⸌|⸜\b/, "'")}; nokogiri_xml_doc end

但是,这真的更好吗?

我试着使用gsub!还有你建议的代码。但是,当我这样做时,内容不会得到更新。它似乎只在我使用node.content=node.content.gsub之前的代码时记录更改。。。知道为什么吗?@chell我猜
content()
返回节点内容的副本。因此
gsub对原始内容没有影响。@chell-Ah。。是的,在这种情况下可能不行。(不过通常会这样。)看,似乎正在返回内容的新副本(
NOKOGIRI\u STR_NEW2(content)
)-因此使用
gsub对对象进行变异无效。更改时不要添加“已编辑”或“已更新”标记。相反,将信息合并到响应中,就像您最初编写的一样。如有必要,我们可以告诉您发生了什么变化以及什么时候发生了变化。可读性比试图维护文本更改的可视化日志更重要。我尝试使用gsub!还有你建议的代码。但是,当我这样做时,内容不会得到更新。它似乎只在我使用node.content=node.content.gsub之前的代码时记录更改。。。知道为什么吗?@chell我猜
content()
返回节点内容的副本。因此
gsub对原始内容没有影响。@chell-Ah。。是的,在这种情况下可能不行。(不过通常会这样。)看,似乎正在返回内容的新副本(
NOKOGIRI\u STR_NEW2(content)
)-因此使用
gsub对对象进行变异无效。更改时不要添加“已编辑”或“已更新”标记。相反,将信息合并到响应中,就像您最初编写的一样。如有必要,我们可以告诉您发生了什么变化以及什么时候发生了变化。可读性比试图维护文本更改的可视化日志更重要。您还可以通过仅使用单字母方法/变量名来缩短此代码;)是的,但这不会使它更具可读性;-)“神话”是,以某种方式将代码写在一行中使其更具可读性,因此所有关于“如何将其写在一行中”的问题都存在。我想强调的是,这个问题在Ruby中是没有意义的,因为所有的东西都可以写在一行中。换行符作为表达式分隔符可以替换为
,作为条件或循环中条件分隔符的换行符可以替换为相应的关键字(
表示
如果
除非
,以及
大小写
表示
表示
),用于将方法的名称与其……主体分离的换行符可以替换为空参数列表
()
,等等。甚至多行字符串中的换行符也可以替换为
\n
转义符。我只是想让您上弦。。。但是,当我们这样做的时候,让我们完全停止使用方法,用Thanky lambda语法定义所有内容:DYou还可以通过只使用单字母的方法/变量名来缩短代码;)是的,但这不会使它更具可读性;-)“神话”是,以某种方式将代码写在一行中使其更具可读性,因此所有关于“如何将其写在一行中”的问题都存在。我想强调的是,这个问题在Ruby中是没有意义的,因为所有的东西都可以写在一行中。换行符作为表达式分隔符可以替换为
,作为条件或循环中条件分隔符的换行符可以替换为相应的关键字(
表示
如果
除非
,以及
大小写
表示
表示
),用于将方法的名称与其……主体分离的换行符可以替换为空参数列表
()
,等等。甚至多行字符串中的换行符也可以替换为
\n
转义符。我只是想让您上弦。。。但是,当我们这样做的时候,让我们完全停止使用方法,用Thanky lambda语法定义所有内容:为什么必须是一行?只是因为?为了便于维护,代码需要可读且易于理解。将代码强制放在一行通常至少会破坏其中一项要求,这会使任何人在凌晨3点修复代码时都变得更加困难。这通常是一个非常愤怒的同事,所以想想看,为什么它必须是一条线?只是因为?为了便于维护,代码需要可读且易于理解。将代码强制放在一行通常至少会中断其中一行