我试图让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, …
我试图从``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未找到的情况下接管执行,但我的假设是错误的.
我需要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)
我怀疑有一些方法我忽略了.建议?
我正在测试Web应用程序的前端,并想测试一些转换如何在AJAX请求之间出现各种延迟.有什么办法可以添加sleep(1500)到我的控制器来延迟响应吗?
嘿,有没有办法可以用haml做到这一点?
:javascript
var Tab = <%= @tab %>
Run Code Online (Sandbox Code Playgroud)
我可以添加一个助手,我想:
<script>
var Tab = '<%= @tab %>'
</script>
Run Code Online (Sandbox Code Playgroud)
但是使用HAML会很好!
如何在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中的操作系统?我正在开发一个需要检测Mac与Windows的Sketchup工具.
我是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) 我了解到,gets创建一个新行并要求用户输入内容,并gets.chomp执行相同的操作,但不会创建新行.gets必须返回一个对象,所以你可以调用一个方法,对吗?如果是这样,让我们将该对象命名gets为as tmp,那么你可以调用该chomp方法tmp.但在gets返回之前tmp,它应该在屏幕上打印一个新行.那怎么chomp办?是否在创建后删除了新行?gets
重新解释我的问题的另一种方法是:我打电话时是否执行了以下操作gets.chomp?
gets 打印一个新行gets 回报 tmptmp.chomp 删除新行这是正确的顺序吗?