Ruby China
  • Topics
  • 招聘
  • Wiki
  • 酷站
  • Gems
  • Sign Up
  • Sign In
runup
@runup
Member
NO. 8562 / 2013-08-07

ss
杭州
78 Topics / 423 Replies
2 Followers
10 Following
195 Favorites
No GitHub.
  • Overview
  • Topics
  • Replies
  • Favorites
  • Following
  • Followers
  • 两段元编程代码的疑问 at December 24, 2015

    #2 楼 @luolinae86 懂了,method_one 在被调用的时候同时定义了 method_one 方法,这样子 method_one 方法才能成为实例方法,感谢。

  • kernel 中的 puts 方法是模块实例方法还是模块方法 at December 23, 2015

    #17 楼 @qinfanpeng 感激,在看第一版中文的,理解好之后再啃第二版的。

  • kernel 中的 puts 方法是模块实例方法还是模块方法 at December 23, 2015

    #12 楼 @qinfanpeng 认真看了 module_function 的方法解释,实现了您提到的两个功能,一是作为 private instance method 方法被调用,二是可以直接用模块名进行调用。但是 send 方法为何可以被 Kernel 模块名调用,也可以直接通过对象对用,如下代码:

    Kernel.public_instance_methods.grep(/send/) # [:send, :public_send]
    

    可以知道 send 方法是 Kernel 的 public instance method 方法,那么这里又是什么原理或者方法,使得其可以通过两种方式调用,即可以通过对象调用,也可以被 Kernel 调用。

    另外请教前辈,这些知识点您是怎么积累的?

  • kernel 中的 puts 方法是模块实例方法还是模块方法 at December 23, 2015

    #14 楼 @fighterleslie 终于把这个知识点搞的有点明白了,感激,作为周星驰的粉丝,很喜欢你的头像。

  • kernel 中的 puts 方法是模块实例方法还是模块方法 at December 23, 2015

    #10 楼 @fighterleslie 感谢解答,您的解答我也考虑过,同理参考问题 2 中的例子:

    module KernelMdoule
      def cc
        puts "this is the private method"
      end
      private : cc 
    end
    
    class FatherClass
      include KernelMdoule
    end
    
    class SonClass < FatherClass
      cc
    end
    

    这样的写法会报错,原因为 undefined local variable or method,您的解释为:

    “你调用 cc 方法的时候,receiver 是 SonClass,而不是 SonClass 的实例,当然获取不到实例方法了
    

    但是其实 SonClass 也是一个对象,是 Class 的实例化对象:

    puts SonClass.class  #Class
    puts SonClass.instance_of?(Class) #true
    

    在我的理解里面,问题二中的代码

    class SonClass < FatherClass
      cc
    end
    

    和

    class SonClass < FatherClass
      puts “this is an private instance method ”
    end
    

    的实现形式是一致的,我在问题二的代码中也实现在 module 中构造私有实例方法,并且 include 到父类中,并且在子类中直接进行调用,这和 Object、Kernel 以及其他 Class 的实例化对象(即普通类)实现方式类似,但是实现的结果却是有错的,这是我的困惑所在,也是我的理解上的误区,能不能帮忙指正一下,感谢。

  • kernel 中的 puts 方法是模块实例方法还是模块方法 at December 23, 2015

    #7 楼 @qinfanpeng 链接已经可以访问了

  • kernel 中的 puts 方法是模块实例方法还是模块方法 at December 23, 2015

    #6 楼 @fighterleslie 非常感谢。问题二中代码的错误已经进行了修改。给出问题二的代码是为了和 Kernel 中的 puts 方法做比较,比如如下的代码:

    puts "method one"  #当前对象是main
    
    class KernelMethod
      puts "method two"  #当前对象是class KernelMethod
    
      def method_three
        puts "method three"  #当前对象是obj
      end
    end
    
    obj = KernelMethod.new
    obj.method_threee
    

    结合上面的小伙伴的解释,补充了私有方法不能显式调用的知识,但是在类中进行调用 puts 方法(puts "method two"),与实例方法(puts 是 private instance method)只能被实例化对象调用相违背。在该例中,puts "method two"方法可以实现,但是在我给出的问题 2 中类似的方法是不能实现的。 我应该存在理解上的误区或者知识漏洞,感谢指正。

  • kernel 中的 puts 方法是模块实例方法还是模块方法 at December 22, 2015

    #1 楼 @qinfanpeng 谢谢您的解答,能不能帮我看看我的理解和疑问,非常感谢。

  • kernel 中的 puts 方法是模块实例方法还是模块方法 at December 22, 2015

    我自己有点钻牛角尖了,不多还是想把细节搞清楚,看了原书的内容。下面有几个小问题。 问题 1:任何对象都可以调用 Kernel 模块的方法,但是下面的 obj 对象调用会报错。

    class KernelDemo
    end
    
    obj = KernelDemo.new
    obj.puts("this is the Kernel method")  #报错private method puts
    

    问题 2:我构造了如下的代码,在模块中定义 private method, 并且 include 到类中,并且通过子类继承该类(类似于 Kernel、Object 和普通类的关系),但是在子类中调用 private method 会报错。

    module KernelMdoule
      def cc
        puts "this is the private method"
      end
      private : cc 
    end
    
    class FatherClass
      include KernelModule
    end
    
    class SonClass < FatherClass
      cc
    end
    

    问题 3:官方文档 中所有的方法都是标为 public instance method,但是通过在 irb 中输入如下 Kernel.private_instance_methods 可以得知本页中的所有方法都是 private instance method.而

    Kernel.public_instance_methods.grep(/send/) #=>[:send, :public_send]
    

    可以得知 send 方法是 Kernel 的公有实例方法,因为 Kernel 被引入到类 object 中,因此可以像普通公开实例方法一样被对象调用,而 puts 是私有实例方法,可以像关键词一样调用。如果是这样,那么文档中的表述是否有问题:

    The Kernel instance methods are documented in class Object while the module methods are documented here. These methods are called without a receiver and thus can be called in functional form:
    
  • 关于 “\x80\u3042” 的解释 at December 17, 2015

    终端测试了下:

    “/u80".bytesize= 1, "/u3042".bytesize=3
    
  • 关于 “\x80\u3042” 的解释 at December 16, 2015

    #6 楼 @lgn21st OK,这里谢过~问题很小,非常感谢。

  • 关于 “\x80\u3042” 的解释 at December 16, 2015

    #1 楼 @lgn21st

    \u3042 是 unicode 编码,表示一个以 unicode 编码的字符。
    

    如果是 unidode 编码,一般就是\u这种形式么?是否能提供一些参考资料,另外 unicode 和其其中一种实现形式 utf-8 的字节数是不一样的,那么如何区分这两种表示?

  • 关于 “\x80\u3042” 的解释 at December 16, 2015

    #2 楼 @pathbox 恩,谢谢

  • 关于 “\x80\u3042” 的解释 at December 16, 2015

    #1 楼 @lgn21st 受教了,感谢解释的这么耐心。

  • 关于 <Programming Ruby> 中一段文字的解释 at December 15, 2015

    #3 楼 @chenge 这个问题大意了,是注释,不好意思

  • 关于 <Programming Ruby> 中一段文字的解释 at December 15, 2015

    #1 楼 @chenge 第二行的 ox80(上引号 2)是表示做这个十六进制的平方么?

  • 关于参数作用域的问题 at December 13, 2015

    #1 楼 @pathbox end 是一个作用域的门的说法是第一次听说,刚刚在书中看到一句话,是说可以在块的内部定义额外的绑定,但是这些绑定在块结束时就消失了,我的理解是在块中定义的局部变量,在块外部是访问不到的,因此第二次出现的 number 会被当做是实例方法来进行调用。

  • 一段代码的疑问,涉及迭代和 divmod 方法 at December 05, 2015

    #1 楼 @spacewander 恩,谢谢,是这个原因。

  • [远程] 招聘兼职 Ruby/Rails 有偿翻译 at March 27, 2015

    是哪几本书,方便透露么?

  • Vagrant 需要在本地访问虚拟机中的项目,按照教程步骤访问不了,问题出现在哪里? at March 03, 2015

    #3 楼 @Teddy 改了 ip 就行了,不知是何种原理

  • Vagrant 需要在本地访问虚拟机中的项目,按照教程步骤访问不了,问题出现在哪里? at March 03, 2015

    #6 楼 @ywjno 这个不是一样么?

  • Vagrant 需要在本地访问虚拟机中的项目,按照教程步骤访问不了,问题出现在哪里? at March 03, 2015

    #3 楼 @Teddy 我试试,但是变化 ip 地址有什么用呢?

  • Vagrant 需要在本地访问虚拟机中的项目,按照教程步骤访问不了,问题出现在哪里? at March 03, 2015

    #1 楼 @MrPasserby 添加了 rails s -b 0.0.0.0 语句,但是没有成功,ubuntu 的防火墙设置不知如何下手

  • 报错:ExecJS::ProgramError in Products#index,求解决方法 at February 28, 2015

    #7 楼 @chulielee 没有用你的方法,过了几天试这个程序,发现可以用了

  • 报错:ExecJS::ProgramError in Products#index,求解决方法 at February 13, 2015

    #4 楼 @beiersi 转了 nodejs,还是报这个错误

  • [杭州] 瑞根科技公司招聘若干德才兼备程序员 (Ruby,iOS,全栈,Web) at February 03, 2015

    #5 楼 @regantechjobs 其实给个具体的数会让您的招聘更有诚意。

  • [杭州] 瑞根科技公司招聘若干德才兼备程序员 (Ruby,iOS,全栈,Web) at February 02, 2015

    待遇呢

  • 有关空指针保护模式的一段代码的疑问 at January 21, 2015

    #7 楼 @48hour 那这句话应该是错得了““这个类被存储在一个名为@time_class的类实例变量中”

  • 有关空指针保护模式的一段代码的疑问 at January 19, 2015

    #5 楼 @48hour 是 ruby metaprogramming 第一版的内容,我查看了最新的第二版,代码还是老样子。

  • <<Ruby 元编程>>中的类宏怎么理解,还有帮忙解释下书中这段代码的执行过程。 at January 18, 2015

    #4 楼 @ugoa 回复很清晰,感谢。

  • Prev
  • 1
  • 2
  • …
  • 4
  • 5
  • 6
  • 7
  • 8
  • …
  • 12
  • 13
  • Next
关于 / RubyConf / Ruby 镜像 / RubyGems 镜像 / 活跃会员 / 组织 / API / 贡献者
由众多爱好者共同维护的 Ruby 中文社区,本站使用 Homeland 构建,并采用 Docker 部署。
服务器由 赞助 CDN 由 赞助
iOS 客户端 / Android 客户端 简体中文 / English