2012-06-21 7 views
4

오늘 아침에 proc.new가 클래스 초기화 메소드에서 작동하지만 람다에서는 작동하지 않는다는 것을 알았습니다. 구체적으로, 내 말은 : 위의 경우Ruby proc vs lambda in initialize()

class TestClass 

    attr_reader :proc, :lambda 

    def initialize 
    @proc = Proc.new {puts "Hello from Proc"} 
    @lambda = lambda {puts "Hello from lambda"} 
    end 

end 

c = TestClass.new 
c.proc.call 
c.lambda.call 

는, 결과는 다음과 같습니다

Hello from Proc 
test.rb:14:in `<main>': undefined method `call' for nil:NilClass (NoMethodError) 

이 왜입니까?

감사합니다.

답변

6

당신이 블록을 생성 원래 lambda 방법을 숨기고 attr_accessor라는 lambda이 (그래서 당신의 코드를 효과적으로 루비의 lambda를 숨기고) 정의는 사실. 속성을 작동시키기 위해 다른 속성의 이름을 지정해야합니다.

class TestClass 

    attr_reader :proc, :_lambda 

    def initialize 
    @proc = Proc.new {puts "Hello from Proc"} 
    @_lambda = lambda {puts "Hello from lambda"} 
    end 

end 

c = TestClass.new 
c.proc.call 
c._lambda.call 
+1

'Kernel.lambda'를 호출하는 것이 또 다른 옵션입니다. – Casper