标签: ruby

如何通过反射获取Ruby的Module类定义的常量?

我试图让Matz和Flanagan的"Ruby Programming Language"元编程章节进入我的脑海,但是我无法理解我梦想的以下代码片段的输出:

p Module.constants.length           # => 88
$snapshot1 = Module.constants       
class A
  NAME=:abc

  $snapshot2 = Module.constants
  p $snapshot2.length               # => 90
  p $snapshot2 - $snapshot1         # => ["A", "NAME"]

end
p Module.constants.length           # => 89
p Module.constants - $snapshot1     # => ["A"]
p A.constants                       # => ["NAME"]
Run Code Online (Sandbox Code Playgroud)

本书指出class方法constants返回类的常量列表(正如您在输出中看到的那样A.constants).当我遇到上述奇怪的行为时,我试图获取为Module类定义的常量列表.

A的常量出现在Module.constants中.如何获取Module类定义的常量列表?

文档的状态

Module.constants返回系统中定义的所有常量.包括所有类和方法的名称

由于A继承了它的实现Module.constants,它在基类和派生类型中的表现如何?

p A.class               # => Class
p A.class.ancestors       # => [Class, Module, Object, Kernel]
Run Code Online (Sandbox Code Playgroud)

注意:如果您使用的是Ruby 1.9, …

ruby reflection metaprogramming

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

如何从`require'中解救:没有这样的文件加载到ruby中?

我试图从``require'中解救:没有这样的文件加载到ruby`中以暗示用户指定-I标志以防他忘记这样做.基本上代码看起来像:

begin
  require 'someFile.rb'
rescue
  puts "someFile.rb was not found, have you"
  puts "forgotten to specify the -I flag?"
  exit
end
Run Code Online (Sandbox Code Playgroud)

我原本预计该rescue部分会在someFile.rb未找到的情况下接管执行,但我的假设是错误的.

ruby exception-handling require

42
推荐指数
2
解决办法
9124
查看次数

如何获取字符串中所有Ruby正则表达式的匹配数据?

我需要MatchData在字符串中每次出现正则表达式.这与Regex的Match All Occurrences中建议的扫描方法不同,因为它只给我一个字符串数组(我需要完整的MatchData,以获取开始和结束信息等).

input = "abc12def34ghijklmno567pqrs"
numbers = /\d+/

numbers.match input # #<MatchData "12"> (only the first match)
input.scan numbers  # ["12", "34", "567"] (all matches, but only the strings)
Run Code Online (Sandbox Code Playgroud)

我怀疑有一些方法我忽略了.建议?

ruby regex

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

如何为Rails控制器添加延迟进行测试?

我正在测试Web应用程序的前端,并想测试一些转换如何在AJAX请求之间出现各种延迟.有什么办法可以添加sleep(1500)到我的控制器来延迟响应吗?

ruby testing ajax ruby-on-rails ruby-on-rails-3

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

内联红宝石:javascript haml标签?

嘿,有没有办法可以用haml做到这一点?

:javascript
   var Tab = <%= @tab %>
Run Code Online (Sandbox Code Playgroud)

我可以添加一个助手,我想:

<script>
  var Tab = '<%= @tab %>'
</script>
Run Code Online (Sandbox Code Playgroud)

但是使用HAML会很好!

javascript ruby haml ruby-on-rails

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

动态设置Ruby对象的属性

如何在Ruby中动态设置对象属性,例如

def set_property(obj, prop_name, prop_value)
    #need to do something like > obj.prop_name = prop_value 

    #we can use eval but I'll prefer a faster/cleaner alternative:
    eval "obj.#{prop_name} = #{prop_value}"
end
Run Code Online (Sandbox Code Playgroud)

ruby dynamic

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

42
推荐指数
3
解决办法
5万
查看次数

在Ruby中检测操作系统

有没有办法检测ruby中的操作系统?我正在开发一个需要检测Mac与Windows的Sketchup工具.

ruby operating-system detection sketchup

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

没有路由匹配缺少必需的密钥:[:id]

我是Rails的新手,我似乎有类似的问题,但我无法解决我的问题.

我的路线:

resources :users do
    resources :items
end
Run Code Online (Sandbox Code Playgroud)

我的模特:

class Item < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
   has_many :items
end
Run Code Online (Sandbox Code Playgroud)

HTML:

<% @items.each do |item| %>
<tr>
  <td><%= item.id %></td>
  <td><%= item.code %></td>
  <td><%= item.name %></td>
  <td><%= item.quantity %></td>
  <td><%= link_to "Edit", edit_user_item_path(item) %></td>  <---- error
Run Code Online (Sandbox Code Playgroud)

而且我得到了同样的错误:

No route matches {:action=>"edit", :controller=>"items", 
:user_id=>#<Item id: 1, user_id: 1, code: "123", name: "test", 
quantity: 12, , created_at: "2014-02-11 15:45:30", updated_at:
"2014-02-11 15:45:30">, :id=>nil, :format=>nil} missing required keys: [:id]
Run Code Online (Sandbox Code Playgroud)

html ruby routes ruby-on-rails path

42
推荐指数
3
解决办法
6万
查看次数

ruby中的gets和gets.chomp是如何工作的?

我了解到,gets创建一个新行并要求用户输入内容,并gets.chomp执行相同的操作,但不会创建新行.gets必须返回一个对象,所以你可以调用一个方法,对吗?如果是这样,让我们​​将该对象命名gets为as tmp,那么你可以调用该chomp方法tmp.但在gets返回之前tmp,它应该在屏幕上打印一个新行.那怎么chomp办?是否创建删除了新行gets

重新解释我的问题的另一种方法是:我打电话时是否执行了以下操作gets.chomp

  1. gets 打印一个新行
  2. gets 回报 tmp
  3. tmp.chomp 删除新行
  4. 用户输入

这是正确的顺序吗?

ruby

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