Tag: ruby 2.0

如何获取调用别名方法的名称?

我有一个名为link_to_admin方法,然后我将另一个名为simple_link_to方法别名 def link_to_admin(name,url,options={}) # My stuff here link_to(name,url,options) end alias_method :simple_link_to, :link_to_admin 在这里我link_to_admin一个问题,如果我调用link_to_admin ,我想将值打印到 标签中 防爆。 def link_to_admin(name,url,options={}) # My stuff here menu = “” menu << " #{link_to(name,url,options)}” menu.html_safe end 如果我打电话给simple_link_to不需要 标签。 所以目前我正在传递一个像li_required这样的options然后在我的方法中检查条件。 这是完美的,我知道这是正确的方法。 def link_to_admin(name,url,options={}) menu = “” menu << options[:li_required] ? " #{link_to(name,url,options)}” : link_to(name,url,options) menu.html_safe end 但是,在我尝试找到像simple_method或link_to_admin类的调用方法simple_method ,我试过: 1.__method__ 2.caller[0]=~/`(.*?)’/ 这没有按预期工作。 […]

访问子进程的STDIN而不捕获STDOUT或STDERR

在Ruby中,是否可以防止生成的子进程的标准输入附加到终端而不必捕获同一进程的STDOUT或STDERR ? 反引号和x字符串( `…` , %x{…} )不起作用,因为它们捕获STDIN。 Kernel#system不起作用,因为它将STDIN连接到终端(拦截像^C这样的信号并阻止它们到达我的程序,这是我试图避免的)。 Open3不起作用,因为它的方法捕获STDOUT或STDOUT和STDERR 。 那我该怎么用?

proc可以与Ruby 2.0中的case语句一起使用吗?

我记得Ruby 2.0中的case语句允许使用procs,但我不能谷歌。 我尝试检查Ruby 2.0.0 NEWS以及如何在Ruby中编写switch语句 。 我也访问了http://ruby-doc.org ,但它对关键字的链接是针对Ruby 1.9而不是Ruby 2.0。 案件陈述中是否允许触发?

Ruby 2.0.0 RVM无法编译OS X 10.8.2 Mountain Lion

尝试使用RVM安装它我收到以下错误: > [2013-02-25 10:09:24] make CC = /usr/local/bin/gcc-4.2 LD = ld > LDSHARED = /usr/local/bin/gcc-4.2 -dynamic -bundle CFLAGS = -O3 > -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=shorten-64-to-32 -Werror=implicit-function-declaration -pipe XCFLAGS = -include ruby/config.h -include ruby/missing.h -D_FORTIFY_SOURCE=2 > -fstack-protector -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT CPPFLAGS = -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -I/usr/local/opt/libyaml/include […]

Ruby 2.0字节码导出/导入

我一直在阅读有关新的ruby 2.0function ,并发现它将支持字节码导入/导出: Ruby 2.0有望简化将预编译的Ruby脚本保存为字节码表示,然后直接运行它们。 我已经安装了ruby-2.0.0-p0,但是我没有找到有关如何导出字节码的任何信息(或者通常是关于该问题的文档)。 此function是否已实施,如果是,我该如何使用它? 我也想知道一些细节。 YARV字节码是否应该与平台无关? 所有gem都自动包含在字节码中吗?

多字节字符是否会干扰正则表达式中的终结字符?

有了这个正则表达式: regex1 = /\z/ 以下字符串匹配: “hello” =~ regex1 # => 5 “こんにちは” =~ regex1 # => 5 但是这些正则表达式: regex2 = /#$/?\z/ regex3 = /\n?\z/ 他们表现出差异: “hello” =~ regex2 # => 5 “hello” =~ regex3 # => 5 “こんにちは” =~ regex2 # => nil “こんにちは” =~ regex3 # => nil 什么是干扰? 字符串编码是UTF-8,操作系统是Linux(即$/是”\n” )。 多字节字符是否会干扰$/ ? 怎么样?

Ruby 2.0.0 String#Match ArgumentError:UTF-8中的无效字节序列

我看到了很多,并没有想出一个优雅的解决方案。 如果用户输入包含无效的字节序列,我需要能够让它不引发exception。 例如: # @raw_response comes from user and contains invalid UTF-8 # for example: @raw_response = “\xBF” regex.match(@raw_response) ArgumentError: invalid byte sequence in UTF-8 已经提出了许多类似的问题,结果似乎是对字符串进行编码或强制编码。 然而,这些都不适合我: regex.match(@raw_response.force_encoding(“UTF-8”)) ArgumentError: invalid byte sequence in UTF-8 要么 regex.match(@raw_response.encode(“UTF-8″, :invalid=>:replace, :replace=>”?”)) ArgumentError: invalid byte sequence in UTF-8 这是Ruby 2.0.0的错误还是我错过了什么? 奇怪的是它似乎正确编码,但匹配继续引发exception: @raw_response.encode(“UTF-8″, :invalid=>:replace, :replace=>”?”).encoding => #

将ruby类转换为模块比使用优化更好的方法?

Module#refine方法接受一个类和一个块并返回一个细化模块,所以我想我可以定义: class Class def include_refined(klass) _refinement = Module.new do include refine(klass) { yield if block_given? } end self.send :include, _refinement end end 并且以下测试通过 class Base def foo “foo” end end class Receiver include_refined(Base) { def foo “refined ” + super end } end describe Receiver do it { should respond_to(:foo) } its(:foo) { should eq(“refined […]

Ruby字符串前置’\’字符

当我试图在代码下面运行时,为什么ruby是pre’nds’\’字符。 它只发生’#$’ 它发生在所有ruby版本中。 puts ‘#$’ => ‘\#$’ 要么 ‘#$’ => ‘\#$’ 要么 ‘mypassord#$123’ => ‘mypassord\#$123’ 请在这里分享您的经验。 这是ruby问题还是其他什么?

当你的类没有定义#each时,返回Enumerator :: Lazy的最佳方法是什么?

可枚举#each依赖于你的枚举提供#each方法。 如果您的枚举没有#each方法,则无法使用#lazy 。 现在, Kernel#enum_for和#to_enum可以灵活地指定除#each之外的枚举方法: Kernel#enum_for(method = :each, *args) 但#enum_for和朋友总是构造普通(非懒惰)枚举器,而不是Enumerator::Lazy 。 我看到Ruby 1.9.3中的Enumerator提供了类似的#newforms: Enumerator#new(obj, method = :each, *args) 不幸的是,在Ruby 2.0中已经完全删除了构造函数。 此外,我认为它在Enumerator::Lazy上根本不可用。 所以在我看来,如果我有一个带有方法的类,我想返回一个惰性枚举器,如果该类没有#each那么我必须定义一些定义#each辅助类。 例如,我有一个Calendar类。 从一开始就提出列举每一个日期对我来说真的没有意义。 #each会没用。 相反,我提供了一个从开始日期(懒惰)枚举的方法: class Calendar … def each_from(first) if block_given? loop do yield first if include?(first) first += step end else EachFrom.new(self, first).lazy end end end 并且EachFrom类看起来像这样: class EachFrom include Enumerable def […]