标签: ruby

48
推荐指数
2
解决办法
3万
查看次数

Javascript是否具有Ruby的method_missing功能?

在Ruby中,我认为你可以调用一个尚未定义的方法,并捕获被调用方法的名称,并在运行时处理此方法.

Javascript可以做同样的事情吗?

javascript ruby metaprogramming

48
推荐指数
3
解决办法
1万
查看次数

找不到libcurl或curl/curl.h(RuntimeError)

我试图在Windows计算机上安装curb 0.8.0但我似乎无法到达任何地方.我一直在尝试每个网站3页深入我的谷歌搜索.请,任何人都知道如何安装这个单件.我已经下载了curl并将其解压缩到C:\ curl.我已将它添加到我的路径并运行命令:

gem install curb -- --with-curl-lib=C:\curl\bin --with-curl-include=C:\curl\include
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我一直得到同样的错误.有什么建议?

ruby gem curl ruby-on-rails curb

48
推荐指数
6
解决办法
2万
查看次数

在Ruby中,'new'和'initialize'之间的关系是什么?初始化时如何返回nil?

我想要的是:

obj = Foo.new(0)  # => nil or false
Run Code Online (Sandbox Code Playgroud)

这不起作用:

class Foo
  def initialize(val)
    return nil if val == 0
  end
end
Run Code Online (Sandbox Code Playgroud)

我知道在C/C++/Java/C#中,我们无法在构造函数中返回一个值.

但我想知道Ruby是否可行.

ruby constructor return initializer new-operator

48
推荐指数
4
解决办法
4万
查看次数

查看Gem的源代码

Ruby dabbler/newbie在这里不熟悉生态系统,如果这是其中一个超级问题,那么道歉.

有没有办法查看gem安装的所有文件和/或源代码?也就是说,我跑了

$ gem install sass
Run Code Online (Sandbox Code Playgroud)

而sass gem现在是我本地系统的一部分

$ gem list --local
...
sass (3.1.16, 3.1.2)
...
Run Code Online (Sandbox Code Playgroud)

我想知道gem install命令对我的系统的影响.是否有命令我可以运行以查看gem安装的所有文件?

一些google搜索后,man gemgem help commands,我发现了contents命令.

$ gem content sass

但是,当我使用前面提到的sass gem运行此命令时,我得到以下结果

.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/engine_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/functions_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/extend_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/logger_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/css2sass_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/conversion_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/script_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util/subset_map_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util/multibyte_string_scanner_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/callbacks_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/importer_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/css_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/scss_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/scss/rx_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/util_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/script_conversion_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/less_conversion_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/cache_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/test/sass/plugin_test.rb
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/sass
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/sass-convert
.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.16/bin/scss
Run Code Online (Sandbox Code Playgroud)

但是,这个列表似乎不完整,因为我知道有文件

.../.rvm/gems/ruby-1.9.2-p180/gems/sass-3.1.2/lib/
Run Code Online (Sandbox Code Playgroud)

为什么不contents显示文件lib

gem安装程序是否可以在gems文件夹之外安装文件?

是否有一个命令可以显示由gem安装的所有内容

ruby rubygems

48
推荐指数
4
解决办法
2万
查看次数

如何从SystemStackError中获取回溯:堆栈级别太深?

在编写ruby时,我常常难以调试无限递归.有没有办法从a SystemStackError中找到一个回溯来找出,究竟是无限循环发生在哪里?

给定一些方法foo,barbaz在循环中相互调用:

def foo
  bar
end

def bar
  baz
end

def baz
  foo
end

foo
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我只是收到消息test.rb:6: stack level too deep (SystemStackError).至少得到堆栈的最后100行是有用的,所以我可以立即看到这是一个循环foo,bar并且baz,像这样:

test.rb:6: stack level too deep (SystemStackError)
  test.rb:2:in `foo'
  test.rb:10:in `baz'
  test.rb:6:in `bar'
  test.rb:2:in `foo'
  test.rb:10:in `baz'
  test.rb:6:in `bar'
  test.rb:2:in `foo'
  [...]
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

编辑:

从下面的答案可以看出,Rubinius可以做到.不幸的是,一些rubinius错误阻止我使用我想要调试的软件.所以准确的问题是:

如何获得MRI(默认红宝石)1.9的回溯?

ruby

48
推荐指数
6
解决办法
1万
查看次数

ruby module_function vs包含模块

在ruby中,我知道模块功能可以通过使用module_function如此处所示而无需在模块中混合而可用.我可以看到它是如何有用的,因此您可以在模块中使用该功能而无需混合.

module MyModule
  def do_something
    puts "hello world"
  end
  module_function :do_something
end
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么你可能希望这两种方式定义函数.

为什么不呢

def MyModule.do_something
Run Code Online (Sandbox Code Playgroud)

要么

def do_something
Run Code Online (Sandbox Code Playgroud)

在哪种情况下,将函数混合使用或用作静态方法是有用的?

ruby module mixins

48
推荐指数
2
解决办法
2万
查看次数

to_d总是在ruby中返回2个小数位

我正在处理货币,我想将数字向下舍入到小数点后2位.即使数字是500.0,我希望它是500.00才能保持一致.当我执行"500.00".to_d时,它将其转换为500.0.

什么是改变这种行为的好方法?我也使用这种方法向下舍入到2位数,并确保它总是有2位小数.

def self.round_down(x, n=2)
    s = x.to_s      
    l = s.index('.') ? s.index('.') + 1 + n : s.length
    s = s[0, l]
    s =  s.index('.') ? s.length - (s.index('.') + 1) == 1 ? s << '0' : s : s << '.00'      
    s.to_f
end
Run Code Online (Sandbox Code Playgroud)

ruby math currency ruby-on-rails decimal

48
推荐指数
4
解决办法
6万
查看次数

无法正确自动生成Ruby DevKit配置文件

我已经将Ruby 2.0与Windows Ruby安装程序,Unpacked DevKit(DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe)一起安装到Program Files并运行

ruby dk.rb init
Run Code Online (Sandbox Code Playgroud)

但生成的config.yml文件没有列出我的Ruby路径.其内容如下:

# This configuration file contains the absolute path locations of all
# installed Rubies to be enhanced to work with the DevKit. This config
# file is generated by the 'ruby dk.rb init' step and may be modified
# before running the 'ruby dk.rb install' step. To include any installed
# Rubies that were not automagically discovered, simply add a line below
# the triple hyphens with the absolute …
Run Code Online (Sandbox Code Playgroud)

ruby devkit

48
推荐指数
2
解决办法
3万
查看次数

在Ruby中测试私有方法(rspec)

是的,我知道,测试私有方法并不是一个好主意(我读过这个帖子 - http://www.ruby-forum.com/topic/197346 - 以及其他一些方法)

但是我该如何测试以下代码?

我用的是xmpp4r.在我的公共方法中,#listen我开始接收jabber消息,如下所示:

def listen
  @client.add_message_callback do |m|
    do_things_with_message(m)
  end
end

private
def do_things_with_message(m)
  #
end
Run Code Online (Sandbox Code Playgroud)

#add_message_callback - 运行块,当消息到来时(在不同的线程中)

所以,测试#listen方法很难,而且测试xmpp4r比我的测试更多#do_things_with_message

如何做好并测试#do_things_with_message?:)(http://www.ruby-forum.com/topic/197346#859664)

将一个新对象的私有方法重构为一个公共的(和一个方法的类 - 它是无意义的)

编辑: 这是关于清洁代码和正确测试的理论问题.在我的第一个链接中,人们认为测试私有方法很差.我不想欺骗#send,但我也没有看到任何可行的重构方法

ruby rspec

48
推荐指数
2
解决办法
4万
查看次数