문제

어젯밤, 나는 고급 루비 언어 기능, 즉 연속 (CALLCC) 및 바인딩 객체라고 생각하는 것에 대해 생각하고있었습니다. 정적으로 유형 된 OO Langages 배경 (C#, Java, C ++)이 있기 때문에 Advanced를 의미합니다. 최근에 Ruby를 발견 했으므로 이러한 언어 기능은 나에게 익숙하지 않습니다.

이 Langages 기능의 실제 사용이 무엇인지 궁금합니다. 내 경험상, 정적으로 입력 한 OO Langages로 모든 것을 수행 할 수 있지만 때로는 현명하게 동의하지는 않습니다. 나는 Sam Ruby의 멋진 기사를 계속 읽는 지속의 아름다움/관심을 알아 냈다고 생각합니다. http://www.intertwely.net/blog/2005/04/13/continuations-for-curmudgeons

그래도 바인딩 물체로 길을 잃었습니다. 누군가 나에게 바인딩 객체로 현명하게 수행 할 수 있지만 루비 바인딩 개념을 놓친 Langages에서는 그다지 똑똑하지 않은 실제 예를 제공 할 수 있습니까?

긴 런닝 프로세스 중에 무언가 잘못 될 때 일부 객체를 초기 상태로 롤백하는 것을 생각하고 있었지만 바인딩 객체로 구현 될 수 있는지 확신 할 수 없으며 처리 및 교체 전에 객체를 복제하여 상당히 현명하게 구현할 수 있다고 생각합니다. 처리 중에 무언가 잘못되면 클론이있는 물체를 수정했습니다. 그래서 이것은 내가 생각하는 유효한 예가 아닙니다.

도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

바인딩 클래스를 사용하여 디버깅 해킹을 구현했습니다.

class Array
  def debug binding
    each do |arg|
      puts "arg = #{eval(arg, binding).inspect}"
    end
  end
end

이것을 사용하여 루비 코드 스 니펫 목록과 각 스 니펫이 반환하는 내용을 검사 할 수 있습니다.

# .. some hairy code you want to debug ...
['user','current_resource', 'user.owns?(current_resource)'].debug(binding)

인쇄 할 것입니다

user = #<User id:1, username: 'joe', ...
current_resource = #<Comment id:20, ...
user.owns?(current_resource) = false

빠른 디버깅에 매우 유용합니다.

바인딩 객체를 사용하여 스코프를 캡처해야했습니다. debug 이를 사용하여 사용할 수 있습니다 eval 언제 debug 실행됩니다. 이것을 구현하는 다른 방법이있을 수 있지만 바인딩을 사용하는 것은 쉽고 빠릅니다. 어떤 바인딩 물체가 유용한 지에 대한 훨씬 더 나은 예가있을 것입니다 ...

다른 팁

바인딩 물체는 평가하려고 할 때 유용합니다 ERB 템플릿.

보세요 http://www.seaside.st/ , SmallTalk 웹 응용 프로그램 프레임 워크입니다. 연속성을 광범위하게 사용합니다. 사용 방법에 대한 최고의 실제 예제,이 CMS입니다. http://www.cmsbox.com/en/cms

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top