ruby - `def self.function` 名称是什么意思?

标签 ruby

谁能给我解释一下在方法定义中添加self是什么意思?是不是类似于java中的this关键字?

最佳答案

与其他语言不同,Ruby 没有类方法,但它有附加到特定对象的单例方法。

cat = String.new("cat")
def cat.speak
    'miaow'
end
cat.speak #=> "miaow" 
cat.singleton_methods #=> ["speak"] 

def cat.speak 创建附加到对象 cat 的单例方法。

当你写class A时,它等同于A = Class.new:

A = Class.new
def A.speak
    "I'm class A"
end
A.speak #=> "I'm class A" 
A.singleton_methods #=> ["speak"] 

def A.speak 创建一个附加到对象 A 的单例方法。我们称它为类 A 的类方法。

当你写作时

class A
    def self.c_method
        'in A#c_method'
    end
end

您创建了 Class(*) 的实例。在类定义内部,Ruby 将 self 设置为 Class 的这个新实例,该实例已分配给常量 A。因此 def self.c_method 等同于 def cat.speak ,也就是说你定义了一个单例方法附加到对象 self,它当前是类 A。

现在类A有两个单例方法,我们通常称之为类方法。

A.singleton_methods
 => ["c_method", "speak"] 

(*) 从技术上讲,在这种情况下,A 已经由 A = Class.new 创建,class A重新打开现有的类。这就是为什么我们最后有两个单例方法。但在通常情况下,它是类的第一个定义,它意味着 Class.new

关于ruby - `def self.function` 名称是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13706373/

相关文章:

ruby - 使用 FastImage 的 Jekyll 插件返回本地镜像错误

ruby - 如何流式传输(大)日志文件?

iphone - 在没有 Mac 的情况下开发 iPhone 应用程序?

ruby - 在数组中找到 block 返回 true 的第一个元素并返回 block 的返回值

ruby-on-rails - 怎样做才能有利润?

ruby - 从 FaSTLane 将环境变量传递给 shell 脚本

ruby-on-rails - 使用 “impressionist” gem Ruby on Rails 计算页面浏览量

ruby - 如何从 Ruby 中的字符串末尾删除多个\n

ruby - 如何在 vim 中使用正确的 ruby ?如何在 VIM 中修改 $PATH?

ruby - 在 OS X Snow Leopard 上使用 RVM 安装 Ruby 2.0 时出错