需要帮助理解Ruby代码

时间:2015-07-27 00:02:39

标签: ruby

我正在 codewars.com 处理编码问题。这就是所述问题的答案:

class Conjurer
  def self.conjure(name, lambda)
    define_method name, lambda
  end
end

我想阐明我阅读它的方式,并接受批评,这有助于我更好地理解这段代码的含义。

  1. 创建了课程Conjurer
  2. 调用类的实例方法,表示类本身。
  3. 永久参数namelambda
  4. 不确定define_method name, lambda的含义。

2 个答案:

答案 0 :(得分:2)

define_method创建一个名为name的方法,并将其传递给块lambda。因此,如果调用方法name,它将运行变量lamba表示的块。

self.conjure允许您在类中定义方法:name参数成为方法的名称,lambda成为方法本身的主体。

答案 1 :(得分:2)

  
      
  1. 创建了课程Conjurer
  2.   

是。更准确地说,Conjurer类是打开的,这意味着它被打开以进行修改。在这种情况下,正在添加conjure方法。

在Ruby中,您可以多次打开一个类:

class Conjurer
  def self.something
    # code
  end
end

class Conjurer
  def self.other_thing
    # code
  end
end

这与做

相同
class Conjurer
  def self.something
    # code
  end

  def self.other_thing
    # code
  end
end
  
      
  1. 调用类的实例方法,表示类本身。
  2.   

没有。它不是方法调用,而是方法定义。 def关键字定义了一种新方法。 def self.Conjurer类而不是Conjurer.new实例定义了一种方法。

  
      
  1. 永久参数namelambda
  2.   

几乎。参数为namelambda,但它们不是调用的参数(有关参数和参数之间的差异,请参阅here),因为这不是方法call,是一种方法定义。

  
      
  1. 不确定define_method name, lambda的含义。
  2.   

define_method是Ruby语言的一部分。它说的是,它定义了一个名为name的方法,在调用时,执行lambda。请参阅文档here