簡體   English   中英

為什么instance_eval使用Proc而不是Lambda成功?

[英]Why does instance_eval succeed with a Proc but not with a Lambda?

我有以下課程:

class User
  code1 = Proc.new { }
  code2 = lambda { }

  define_method :test do
    self.class.instance_eval &code1
    self.class.instance_eval &code2
  end
end

User.new.test

為什么第二個instance_eval失敗並且wrong number of arguments (1 for 0)錯誤?

instance_eval正在向lambda產生selfUser )。 Lambdas特別關注它們的參數 - 與方法相同 - 並且如果太少/很多則會引發ArgumentError

class User
  code1 = Proc.new { |x| x == User } # true
  code2 = lambda { |x| x == User }   # true

  define_method :test do
    self.class.instance_eval &code1
    self.class.instance_eval &code2
  end
end

相關: Ruby中的proc和lambda有什么區別?

如果您仍想使用lambda,此代碼將起作用:

block = lambda { "Hello" } # or -> { "Hello" }
some_obj.instance_exec(&block)

instance_exec相反的instance_eval不會將self作為給定塊的參數提供,因此不會拋出wrong number of arguments (1 for 0)

在這里查看更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM