ruby - ruby 代码中未定义的方法 `lambda'

标签 ruby

我有密码

class A < BasicObject

    def initialize var1, *args, &block
      if var1 == :lambda
        @var1 = lambda &block
      end
    end
end

a = A.new :lambda, 123  do |var|
  puts "ha ha ha"
end

为什么会报错?

undefined method `lambda' for #<A:0x00000001687968> (NoMethodError)

不像这个(不是它造成的)

class A
   def initialize var1, *args, &block
      if var1 == :lambda
        @var1 = lambda &block
      end
    end
end

最佳答案

lambda 方法定义在Kernel 模块中。 对象 包括内核BasicObject 没有。因此,如果您想从 BasicObject 使用 lambda,则必须将其称为 ::Kernel.lambda

请注意,这并非特定于 lambda - 它也适用于任何其他内核方法(例如 puts)。

PS:请注意,@var1 = lambda &block 与编写 @var1 = block 的作用相同,因此使用 lambda这里实际上没有必要。

关于ruby - ruby 代码中未定义的方法 `lambda',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14287567/

相关文章:

ruby-on-rails - Debian 添加用户

ruby - 如何使用 Shoes 中的进度条?

ruby-on-rails - 为什么 current_user 给我一个错误?

ruby-on-rails - Resque 启 Action 业,但不执行任何操作

mysql - ruby on rails mysql 数组中的全文相关性分数

ruby - 使用 gsub 或 sub 替换一个字符

ruby-on-rails - 如何在 rails 中添加单个自定义路由?

ruby - Homebrew 程序(Mac): cannot install libksba or dependency libgpg-error

ruby-on-rails - 在 rails 中选择某些用户

ruby-on-rails - 如何只显示独特的主题?