`
biyeah
  • 浏览: 200485 次
  • 来自: ...
社区版块
存档分类
最新评论

Ruby的一些疑问

    博客分类:
  • Ruby
 
阅读更多
1、网点看到一断程序,
def m1(a)
	puts 'invoke m1'
	puts a
end

def self.m1(a)
	puts 'invoke self.m1'
	a = 20
	super
end

m1 10


运行结果如下:
invoke self.m1
invoke m1
20

为何先运行self.m1,这里为何可以使用super?还弄不明白,先记下来。
2、下面的代码在rails源代码中看到的,不明白&:to_s的写法。
(1..10).map(&:to_s)


3、
def who
  person = "Matz"
  yield("rocks")
  # p city #=>undefined local variable or method `city'
end

person = "Matsumoto"

who do |y|
  puts("#{person}, #{y} the world") # => Matsumoto, rocks the world
  city = "Tokyo"
  person = 'new'
end

puts person #=> new

4、#nokogiri css.rb源码
require 'nokogiri/css/xpath_visitor'
x = $-w  #<--表示什么意思?
$-w = false
require 'nokogiri/css/parser'
$-w = x

5、
class H < Hash
    # Gets or sets keys in the hash.
    #
    #   @cookies.my_favorite = :macadamian
    #   @cookies.my_favorite
    #   => :macadamian
    #
    def method_missing(m,*a)
        m.to_s=~/=$/?self[$`]=a[0]:a==[]?self[m.to_s]:super
    end
    undef id, type if ?? == 63 #这里的??与63表示什么意思?
  end
分享到:
评论
4 楼 Anleb 2012-08-01  
def m1(a)
	puts 'invoke m1'
	puts a
end

def self.m1(a)
	puts 'invoke self.m1'
	a = 20
	super
end

m1 10



我帮你解答,
1.首先你当前是顶级域,也就是说self是main
2.def 定义的方法是一个实例方法
3.def self.m1 定义的是main的单件方法,存在于单件类中。

祖先链: mian对象---main的单件类---Object类--Kernel----BaseObject

现在你应该明白为什么 先调用self.m1了吧




3 楼 biyeah 2012-02-13  
补充,任何类,只要实现to_proc方法,都可以与&结合做为参数。<<Ruby Best Practices>>给出一个很好的例子。

class Filter
  def initialize
    @constraints = []
  end
  def constraint(&block)
    @constraints << block
  end
  def to_proc
    lambda { |e| @constraints.all? { |fn| fn.call(e) } }
  end
end

filter = Filter.new
filter.constraint { |x| x > 10 }
filter.constraint { |x| x.even? }
filter.constraint { |x| x % 3 == 0 }

p (8..24).select(&filter) #=> [12,18,24]

2 楼 biyeah 2012-02-13  
第二个问题:首先要弄清楚两个关键问题,1、(1..10).map(&:to_s)参数前面加&是表示传递的是block,例如:

def foo(x)
  yield x
end

a = lambda { |x| puts x}

foo('hello', &a) #=> hello
a是一个proc,做为参数前面加&表示一个block。
2、(1..10).map(&:to_s),:to_s是一个symbol,而symbol有一个to_proc函数,定义为
class Symbol
  def to_proc
    lambda { |x| x.send(self) }
  end
end
返回一个proc,所以当symbol与&结合时,即调用Symbol#to_proc,所以(1..10).map(&:to_s)等价于
(1..10).map(&(lambda {|x| x.send(:to_s)}))
1 楼 biyeah 2012-02-06  
第5个问题,?后面跟字符串表示一个字符
?a == 'a' #=> true
不能这样写?ab,?后面不能跟两个以上字符。所以??即'?',63是'?'的ascii十进制。为什么要做?? == 63这个判断?还是没搞清楚。

相关推荐

    ruby导出csv文件

    在ruby中用fastercsv导出csv文件。 给出了主要文件,如有疑问请查google。

    ruby宝典进阶版.zip

    ruby宝典进阶版ruby宝典进阶版ruby宝典进阶版《宝典进阶版》是一本资源,它是一本针对宝典学习者的进阶教材。该资源提供了更深入的知识和技巧,帮助读者更好地理解和应用宝典的内容。它包含了以下几个方面的内容: ...

    MongoDB的Ruby驱动程序-Ruby开发

    支持与反馈有关问题,疑问或反馈r MongoDB Ruby驱动程序官方支持的MongoDB Ruby驱动程序。 文档文档位于此处。 API文档可在此处找到。 支持和反馈对于与Ruby驱动程序有关的问题,疑问或反馈,请查看我们的支持渠道。...

    watir安装包之一 ruby1

    此文件太大,压缩成两个part,此为Part1 ,两个文件下载后放一起解压缩即可。 watir本地安装的安装文件共六部分,按照一~六安装即可,每一部分重要的内容在描述里面说明,如有疑问,可以留言。

    lifx-gem, 一个 ruby gem,提供了轻松与LIFX灯光交互的能力.zip

    lifx-gem, 一个 ruby gem,提供了轻松与LIFX灯光交互的能力 LIFXLIFX将不再支持 LIFX gem 。 为了更好地支持开发人员,而不是为局域网协议本身发布文档,使sdk成为任何语言。 我们还发布了基于任何地方的HTTP API云...

    mongo-ruby-driver:MongoDB的Ruby驱动程序

    如有疑问,讨论或一般技术支持,请访问。 请参阅文档中的“页面以获取其他支持资源。 错误和功能要求 要报告驱动程序中的错误或请求特定于Ruby驱动程序的功能,请执行以下操作: 请访问并登录(如果您还没有帐户...

    ruby-jwt:RFC 7519 OAuth JSON Web令牌(JWT)标准的ruby实现

    如果您对开发或使用有其他疑问,请加入我们: 。 公告公告 Ruby 1.9.3支持在2016年12月31日被删除。 版本1.5.3已取消。 请参阅: 和 赞助商 商标 信息 如果你想安全的基于令牌的认证快速添加到Ruby项目,随时检查...

    vim-rails-bundle:Vim内的Ruby on Rails开发环境

    如果您对字体和状态栏的渲染有任何疑问,请首先参考的。 安装 要求 Vim / Gvim Ruby,Rails,Bundler ( ftw!) 吉特 其他插件使用了一些核心内容。 为了使它们起作用,您需要安装以下软件包: 卷曲,xclip for...

    RFC 7519 OAuth JSON Web令牌(JWT)标准的Ruby实现。-Ruby开发

    如果您对开发或使用有其他疑问,请加入我们:ruby-jwt google group。 公告Ruby 1.9.3 supp JWT RFC 7519 OAuth JSON Web令牌(JWT)标准的ruby实现。 如果您对开发或使用有其他疑问,请加入我们:ruby-jwt google ...

    Ruby中检测Gem是否安装的方法

    于是遇到了一些疑问,然后解决了,这里记录一下。 在Ruby中,Gem是一个很常见的东西,其相当于插件,Ruby有很多很棒的gem,避免了我们重复造轮子,我的demo中需要安装gem,但是为了更加实现好一些,先检测gem是否...

    iyzipay-ruby:iyzipay api ruby​​客户端

    如果您有任何疑问,请在Github上打开问题,或通过与我们联系。安装 gem install iyzipay邦德勒 source 'https://rubygems.org'gem 'iyzipay'用法 before :all do @options = Iyzipay :: Options . new @options . ...

    适用于Rails,Sinatra和其他Ruby Web框架的文件上传的经典解决方案-Ruby开发

    信息可在RubyDoc.info上找到RDoc文档GitHub上可找到源代码在Wiki上可以找到更多信息,已知限制和操作方法获得帮助如果您有任何疑问,请向Stack Overflow社区寻求帮助。 请不要在问题跟踪器上发布使用问题。 l

    watir安装包之一 ruby2

    此文件太大,压缩成两个Part,此为Part2,两个文件下载后放一起解压缩即可。 watir本地安装的安装文件共六部分,按照一~六安装即可,每一部分重要的内容在描述里面说明,如有疑问,可以留言。

    aftership-sdk-ruby:AfterShip API的ruby gem SDK

    借助AfterShip,在线商人可以在保持购买力的同时主动通知客户,从而扩展了他们的客户服务范围,同时通过减少客户对购买交付状态的疑问来节省时间和金钱。 迁移到4.5.2+ 我们建议所有用户将aftership gem升级到v...

    azure-sdk-for-ruby:Ruby SDK for Azure资源管理器

    用于Ruby的Microsoft Azure SDK-资源管理(预览) 该项目提供了用于Azure资源管理(ARM)的... 如有任何疑问,请随时在GitHub上打开一个问题。不再受支持的软件包包含“ azure-mgmt”的所有资源管理Azure资源管理包以

    understand_ruby_memory:试图了解Ruby内存:full_moon_face:

    我最初发表这篇文章是为了补充我对Ruby记忆的疑问(在MRI中)。 我没有CS学位,但了解Ruby如何使用内存并非易事。 我对这个主题充满热情。 该项目现在是Wiki。 随时贡献自己的力量。 :raising_hands:

    Enumerable-Methods:这是Microverse中Ruby模块的项目#2

    如果您对上述方法之一有任何疑问,请考虑检查文件。 现场演示 这是该项目中所有方法的。 建于 Ruby Visual Studio,Git和GitHub 入门 先决条件 要运行此项目,您需要一台装有Ruby的计​​算机。 如果您不确定如何...

    库:Ruby和Rails | Ruby数据库基础火车系统,图书馆(两天计划)

    专辑 _简短的介绍 _ 按名称 描述 _ _ 行为 输入 输出 设置/安装要求 在浏览器中启动 。...如果您对该程序有任何疑问或想要联系我们,请发送电子... RUBY ,基于Atom构建 执照 根据MIT许可获得许可 版权所有(c)2019名称

    ruby2haskell-tutorial:面向Ruby程序员的基本Haskell演示文稿教程和支持材料

    从Ruby到Haskell:简介 内容: ... 如果您对演示文稿的内容或在LaTeX和beamer中如何进行演示有任何疑问,请随时通过与我联系。 使用示例 要完成本教程中给出的示例,您将需要在计算机上安装以下软件:

    carrierwave:用于Rails,Sinatra和其他Ruby Web框架的文件上传的更高级解决方案

    信息RDoc文档源代码更多信息,已知限制和操作方法获得帮助如有任何疑问,请向社区寻求帮助。 请不要在问题跟踪器上发布使用问题。 请报告错误,但请先阅读Wiki中的“获得帮助”部分。安装安装最新版本: $ gem ...

Global site tag (gtag.js) - Google Analytics