블록 내부에서 메소드와 함수를 사용할 수있게하는 방법이 있습니까? 내가 할 노력하고있어 :Ruby 블록 내에서만 사용할 수있게 만들기
some_block do
available_only_in_block
is_this_here?
okay_cool
end
그러나 is_this_here?
, okay_cool
등뿐만 아니라 그 밖에, 그 블록 내부에 접근 할 수있는. 어떤 아이디어 있니?
블록 내부에서 메소드와 함수를 사용할 수있게하는 방법이 있습니까? 내가 할 노력하고있어 :Ruby 블록 내에서만 사용할 수있게 만들기
some_block do
available_only_in_block
is_this_here?
okay_cool
end
그러나 is_this_here?
, okay_cool
등뿐만 아니라 그 밖에, 그 블록 내부에 접근 할 수있는. 어떤 아이디어 있니?
블록으로 사용할 수있는 메서드로 개체를 인수로 전달하십시오. 이것은 IO.open
또는 XML builder과 같이 Ruby에서 널리 사용되는 패턴입니다. 당신은 당신이 instance_eval
또는 instance_exec
를 사용하여 요구 것에 가까워 질 수 있지만, 상당히 놀라운 결과를 초래할 수있는 즉, 일반적으로 나쁜 생각
some_block do |thing|
thing.available_only_in_block
thing.is_this_here?
thing.okay_cool
end
참고. 당신이 인수를 전달할 경우, 당신은 항상 당신이 참조 할 수 있습니다 알고 있지만
class Foo
def bar
"Hello"
end
end
def with_foo &block
Foo.new.instance_exec &block
end
with_foo { bar } #=> "Hello"
bar = 10
with_foo { bar } #=> 10
with_foo { self.bar } #=> "Hello
는 :
def with_foo
yield Foo.new
end
with_foo { |x| x.bar } #=> "Hello"
bar = 10
x = 20
with_foo { |x| x.bar } #=> "Hello"
이것은 정확히 내가 찾던 것입니다. –
나는 당신이 원하는 것을 이해 모르겠어요. 'okay_cool'과 회사 변수 또는 메소드입니까? 변수 인 경우 블록에서 선언하면 블록에 로컬이됩니다. – Telemachus
그들은 방법입니다. –