我知道很多Java人已经开始关注Scala,因为它在JVM上运行,而且微软世界的很多人都在关注F#,但是Ruby有什么作为自然的功能继承者呢?
在纯粹的FP意义上,Ruby并不缺少任何东西,相反,有些人可能会说太多了.函数式语言迫使程序员不要使用全局变量和其他习语(尽管可以在函数式语言中使用全局变量)
我在内存中生成了许多PDF文件,我想将它们压缩成一个zip文件,然后再将其作为电子邮件附件发送.我看过Rubyzip并且它不允许我创建一个zip文件而不将其保存到磁盘(也许我错了).
有没有办法在不创建临时文件的情况下压缩这些文件?
有没有办法访问嵌套的form_bulder.object?
## controller
@project = Project.new
@project.tasks.build
form_for(@project) do |f|
f.object.nil? ## returns false
fields_for :tasks do |builder|
builder.object.nil? ## returns true
end
end
Run Code Online (Sandbox Code Playgroud) 我在我的控制器中有这个代码,并希望通过功能测试来测试这个代码行.
raise ActiveRecord::RecordNotFound if @post.nil?
Run Code Online (Sandbox Code Playgroud)
我应该使用哪种断言方法?我使用内置的rails 2.3.5测试框架.
我用这段代码试了一下:
test "should return 404 if page doesn't exist." do
get :show, :url => ["nothing", "here"]
assert_response :missing
end
Run Code Online (Sandbox Code Playgroud)
但它对我不起作用.得到了这个测试输出:
test_should_return_404_if_page_doesn't_exist.(PageControllerTest):
ActiveRecord::RecordNotFound: ActiveRecord::RecordNotFound
app/controllers/page_controller.rb:7:in `show'
/test/functional/page_controller_test.rb:21:in `test_should_return_404_if_page_doesn't_exist.'
Run Code Online (Sandbox Code Playgroud) 我是Ruby的新手,有没有办法yield从Ruby函数中获取值?如果有,怎么样?如果没有,我有什么选择来编写惰性代码?
我的最终目标是创建几个静态HTML文件,以便传递给其他人.
但对于我的工作流程,我希望将HAML作为基本源文件.在这样做的时候,我希望至少在我这边干预这个过程.
现在我有很多页面最终将共享一个共同的布局,我想知道如何合并布局.
这是我目前的代码:
#!/usr/bin/env ruby
require 'rubygems'
require 'rake'
require 'haml'
FileList.new('./src/*.html.haml').each do |filename|
if filename =~ /([^\/]+)\.haml$/
File.open($1, 'w') do |f|
f.write Haml::Engine.new(File.read(filename)).render
end
end
end
Run Code Online (Sandbox Code Playgroud)
!!!
%html
%head
%title Yay
%body
= yield
Run Code Online (Sandbox Code Playgroud)
= render :layout => 'header' do
%p This is awesome
Run Code Online (Sandbox Code Playgroud)
现在,这显然不工作,因为渲染方法是未定义出的Rails的背景下,但我希望它得到跨我想要做的地步.
有什么建议?
我曾经这样做过:
Foo.find_by_bar('a-value')
Run Code Online (Sandbox Code Playgroud)
我现在可以这样做:
Foo.where(:bar => 'a-value').limit(1).first
Run Code Online (Sandbox Code Playgroud)
这是推荐的吗?这是最好的方法吗?我应该继续使用"旧的"方式,因为它仍然是有用的语法糖,或者是否有更好的方式我现在可以做到这一点,这将支持链接和所有其他好东西?
Ruby 2.0支持关键字参数.我想知道,常规与关键字参数混合的"规则"是什么?这样的东西不起作用:
def some_method(a: 'first', b: 'second', c)
[a, b, c]
end
Run Code Online (Sandbox Code Playgroud)
但这会:
def some_method(c, a: 'first', b: 'second')
[a, b, c]
end
Run Code Online (Sandbox Code Playgroud)
那么为什么在关键字参数(而不是之后)之前放置一个常规参数呢?
网上有关于此的一些参考(混合关键字和常规参数)吗?我似乎找不到任何东西.
编辑修复了toro2k的评论.
Range#include?并且Range#cover?似乎在源代码看作是不同的1,2,和它们在不同的效率.
t = Time.now
500000.times do
("a".."z").include?("g")
end
puts Time.now - t # => 0.504382493
t = Time.now
500000.times do
("a".."z").cover?("g")
end
puts Time.now - t # => 0.454867868
Run Code Online (Sandbox Code Playgroud)
看源代码,Range#include?似乎比复杂Range#cover?.为什么不能Range#include?简单地说别名是Range#cover?什么?