2017-05-22 3 views
0

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 

나는이 방법을 한 줄로 줄이고 싶지만 그 방법을 알아낼 수는 없다.

아이디어가 있으십니까?

+0

왜 한 줄이어야합니까? 으니까? 코드는 읽기 쉽고 유지하기 쉽도록 이해할 수 있어야합니다. 코드를 한 줄로 작성하면 이러한 요구 사항 중 적어도 하나가 깨지기 때문에 부서지면 3AM에 수정해야하는 사람이 누구에게나 어려워집니다. 그것은 보통 매우 불쾌한 동료이기 때문에 그것을 고려하십시오. –

답변

1

솔직히 말해서 나는 두 줄로 남기고 싶습니다. 그것을 한 줄로 압축하는 것은 "똑똑한"것이지만, 코드를 읽기가 더 어렵게 만듭니다. 당신이 정말로이 한 라이너 만들고 싶었다 경우

, 그러나, 당신은 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 

유용한 정보에 대한 주석을 참조하십시오.

+0

나는 gsub를 사용해 보았습니다! 그리고 당신이 제안한 코드. 그러나 콘텐츠를 업데이트하지 않습니다. 이전처럼 node.content = node.content.gsub ...와 같은 코드를 사용할 때 변경 사항을 기록하는 것으로 보인다. 이유는 무엇입니까? – chell

+0

@chell'content()'는 노드 내용의 복사본을 반환합니다. 그러므로'gsub! '는 원래의 내용에 아무런 영향을 미치지 않습니다. – sschmeck

+0

@chell 아 .. 예, 아마도이 경우에는 작동하지 않습니다. (Nokogiri의 근원지) (http://www.rubydoc.info/github/sparklemotion/nokogiri/Nokogiri/XML/Node#content-instance_method)를 보면, 그것의 새로운 사본이 나타납니다. 콘텐츠가 반환됩니다 ('NOKOGIRI_STR_NEW2 (content)'). 그래서'gsub! '로 객체를 변경하면 작동하지 않습니다. –

3

나는이 방법을 한 줄로 줄이고 싶지만 그 방법을 알아낼 수는 없다.

당신은 항상 세미콜론 또는 키워드로 바꿈 교체에 상관없이, 어떤 코드를 작성하지 얼마나 복잡 한 줄에 수

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

하지만, 정말 좋은 것입니다?

+0

또한 단일 문자 방법/변수 이름 만 사용하여이 코드를 더 짧게 만들 수 있습니다.) –

+2

예, 그렇긴하지만 더 읽기 쉽게 만들 수는 없습니다 ;-) "신화"는 어떻게 든 한 줄에 코드를 작성하면 더 읽기 쉽고, 따라서 "한 줄에 이것을 쓰는 법"에 관한 모든 질문. Ruby에서는 모든 것이 한 줄로 작성 될 수 있기 때문에이 질문은 의미가 없다는 점을 강조하고 싶습니다. 표현 구분 기호로 사용되는 줄 바꿈은';'로 바꿀 수 있습니다. 조건이나 루프의 조건에 대한 구분 기호는 각 키워드로 바꿀 수 있습니다 (if, if 및 except에 대해'then' 및 for, do, do에 대해) 'while'과'for'), 메소드의 이름과 그 이름을 분리하는 줄 바꿈. –

+1

... body는 빈 매개 변수 목록'()'또는';'등으로 대체 될 수 있습니다. 여러 줄 문자열에서 줄 바꿈을 '\ n'이스케이프로 바꿀 수 있습니다. –

관련 문제