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

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笔记1ruby笔记1ruby笔记1

    3. "看ruby过程中的疑问先放着":这个文件名可能表示作者在学习过程中遇到的一些未解的问题或困惑点,可能是一份待解决的问题列表,或者是对某些复杂概念或技术的初步记录。这些疑问可能涉及到Ruby的面向对象特性、...

    Redis-Cluster实战--3.安装准备-Ruby安装(含视频)

    Redis-Cluster是Redis的一种分布式实现,它通过分片(sharding)技术将数据分散存储在多个节点上,以实现高可用性和水平...在实际操作过程中,如果有任何疑问或遇到问题,可以参考相关文档或观看教程视频来获取帮助。

    Ruby-RubyProgressbarRuby最灵活的文本库进度条库

    同时,Ruby社区有丰富的资源和讨论,可以解答你在使用过程中遇到的疑问。 8. **版本更新** 随着Ruby语言和开发环境的发展,RubyProgressbar也会定期发布新版本,添加新功能,修复已知问题。保持库的更新可以帮助你...

    ruby-使用ruby实现的算法之加密解密算法.zip

    在Ruby编程语言中,加密和解密是网络安全和数据保护的重要方面。本资源包"ruby-使用ruby实现的算法之加密解密算法.zip"显然包含...如果你对某个特定部分有疑问或需要进一步解释,可以深入研究这些代码以获取更多信息。

    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:

    jekyll-4.3.3 Jekyll 是一个简单的、博客感知的静态站点生成器Ruby

    Jekyll 是一个简单的、博客感知的静态站点生成器,非常适合个人、项目或组织站点。...看看一些现有的网站 分叉并贡献您自己的修改 有疑问吗?查看我们的官方论坛社区 Jekyll Talk 和 Libera IRC 上的 #jekyll 频道

Global site tag (gtag.js) - Google Analytics