首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Ruby中,如何验证Struct的身份?

在Ruby中,如何验证Struct的身份?
EN

Stack Overflow用户
提问于 2018-05-28 07:58:24
回答 1查看 739关注 0票数 3

我一直在尝试理解Ryan Bates在他的Presenters (#287 Presenters from Scratch (pro) - RailsCasts)中使用的present方法中的self类。在视频中,Ryan说,'Self是一个模板对象,它包含了我们想要访问的所有助手方法‘,但我想知道这个对象的类。在阅读了一系列博客文章、线程和Ruby文档后,我开始认为self是一种结构,但我不知道如何确认这一概念。

我的问题是:1)在下面的present方法中,self是一个Struct吗?和2)如何验证某物是一个结构?

module ApplicationHelper
  def present(object, klass = nil)
    klass ||= "#{object.class}Presenter".constantize
    presenter = klass.new(object, self)
    yield presenter if block_given?
    presenter
  end
end

我之所以这样问,是因为我没有太多使用Struct类的经验,当我将binding.pry放在上面的方法中间并试图获得self的类名时,我最终会遇到更多的问题。

  • 当我输入self.class时,我得到,#<Class:0x007fb64f696268>我想知道在这里获取Class是否表示我有一个Struct__,但是我找不到任何确认此
  • 的文档当我进入self.class.class时,我得到< code >D24
  • 当我输入self时,我得到一个扩展对象,它以下面列出的代码行开头

@ line 16 ApplicationHelper#present: 14: def present(object,klass = nil) 15: klass ||= "#{object.class} presenter ".constantize 16: binding.pry 17: presenter = klass.new(object,self) 18: self if block_given? 19: end 1 pry(#<#>)> self => #<#:0x007fb64f6948f0 presenter @_config={},@_controller= #:en,:formats=>:html,:variants=>[],:handlers=>:raw,:erb,:html,:builder,:ruby},show entries=0 default_proc=nil>,应用程序“#”,“@prefixes=”,@rendered_format=:html,@view_paths= posts

这个post有助于解释结构是如何工作的,但不能解释如何确认他们有一个结构。

最初,当我开始剖析present方法时,我发现这个answer很有帮助。然而,我被这条评论搞糊涂了,他说"ModelPresenter是通过传递模型和ApplicationHelper类来初始化的“,因为ApplicationHelper是一个模块。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 08:57:39

摘要

使用is_a?(Struct)

说明

struct是匿名类的构造函数:

struct_class = Struct.new(:foo)
# => #<Class:0x007fa7e006ea98>

您可以检查匿名类的实例是否为结构,如下所示:

inst = struct_class.new
inst.class.superclass
# => Struct

但是,Object#is_a?会检查父类和超类:

inst.is_a?(Struct)
# => true

您可以在下面的任意示例中看到相同的行为:

# inherits from String
anon_class = Class.new(String) 

inst = anon_class.new
# => ""

inst.class == String
# => false

inst.is_a?(String)
# => true
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50557579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档