Tag:

Ruby on Rails传递对yield(模板)的引用

简而言之:我的每个标签都有自己的forms,因此我决定制作一个单独的布局,只是将表单本身作为布局的可变内容。 但我需要让form_for在布局中,而不是在每个窗体中都有,因为我在布局中有一些其他常见的窗体元素。 那么如何将表单生成器的引用f传递给模板呢? 布局代码: 可能吗 ? PS找到这个: 干掉一个帮助器:包装form_for并访问本地表单变量 (@ rubish的答案),但似乎不起作用,f仍然未定义视图。

Ruby中的块和过程

我已经开始学习Ruby了,我已经阅读了几本教程,我甚至买了一本书(“编程Ruby 1.9 – 实用程序员指南”),我遇到了一些我之前从未见过的新东西。我知道的其他语言(我作为PHP web开发人员工作)。 块和过程。 我想我明白它们是什么,但我不明白为什么它们如此伟大,何时以及为什么我应该使用它们。 无论我到哪里,他们都说块和proc是Ruby中的一个很棒的function,但我不明白它们。 谁能在这里给像我一样的Ruby-newbie一些解释?

Ruby块的问题

代码有什么问题? def call_block(n) if n==1 return 0 elsif n== 2 return 1 else yield return call_block(n-1) + call_block(n-2) end end puts call_block(10) {puts “Take this”} 我正在尝试使用yield来打印除了第十个斐波纳契数之外。 我收到错误:在`call_block’中:没有给出块(LocalJumpError) 即使以下代码抛出错误: def call_block(n) if n==1 yield return 0 elsif n== 2 yield return 1 else yield return call_block(n-1) + call_block(n-2) end end puts call_block(10) {puts “Take this”}

在ruby中没有参数的DSL块

我正在用ruby写一个简单的dsl。 几周前,我偶然发现了一些博文,其中展示了如何转换代码: some_method argument do |book| book.some_method_on_book book.some_other_method_on_book :with => argument end 更清洁的代码: some_method argument do some_method_on_book some_other_method_on_book :with => argument end 我不记得如何做到这一点,我不确定缺点,但更清晰的语法是诱人的。 有没有人对这种转变有所了解?

如何确定开始块的值?

根据The Ruby Programming Language p.164。 如果begin语句没有传播exception,则该语句的值是在begin , rescue或else子句中计算的最后一个表达式的值。 但是我发现这个行为与begin块以及else子句和ensure子句一致 。 这是示例代码: def fact (n) raise “bad argument” if n.to_i e p e.message else p “I am in the else statement” ensure p “I will be always executed” p “The END of begin block” end p value 输出是: “I am in the else statement” “I will […]

如何在Ruby中将块传递给另一个块?

假设我有以下过程: a = Proc.new do puts “start” yield puts “end” end 另外假设我传递给另一个方法,该方法随后在具有该块的另一个类上调用instance_eval ,我现在如何将一个块传递给该方法的结尾,该方法在a产生。 例如: def do_something(a,&b) AnotherClass.instance_eval(&a) # how can I pass b to a here? end a = Proc.new do puts “start” yield puts “end” end do_something(a) do puts “this block is b!” end 输出当然应该是: start this block is b! end 如何将辅助块传递给instance_eval ? 我需要这样的东西作为我正在研究的Ruby模板系统的基础。

标记未使用的块变量

当存在不使用的块或局部变量时,有时人们用*标记它,有时用_标记。 {[1, 2] => 3, [4, 5] => 6}.each{|(x, *), *| px} {[1, 2] => 3, [4, 5] => 6}.each{|(x, _), _| px} {[1, 2, 3], [4, 5, 6]}.each{|*, x, *| px} {[1, 2, 3], [4, 5, 6]}.each{|_, x, _| px} def (x, *), *; px; end def (x, _), _; px; end def *, […]

Ruby块采用数组或多个参数

今天我很惊讶地发现ruby自动找到作为块参数给出的数组的值。 例如: foo = “foo” bar = “bar” p foo.chars.zip(bar.chars).map { |pair| pair }.first #=> [“f”, “b”] p foo.chars.zip(bar.chars).map { |a, b| “#{a},#{b}” }.first #=> “f,b” p foo.chars.zip(bar.chars).map { |a, b,c| “#{a},#{b},#{c}” }.first #=> “f,b,” 我原以为最后两个例子会给出一些错误。 这是ruby中更一般概念的一个例子吗? 我不认为我的问题开头的措辞是正确的,我怎么称呼这里发生的事情?

如何在Ruby中从内存中HTTP发送流数据?

我想上传我在Ruby中运行时生成的数据,比如从块中提取上传内容。 我发现的所有示例仅显示如何在请求之前流式传输必须在磁盘上的文件,但我不想缓冲文件。 滚动我自己的套接字连接除了最佳解决方案是什么? 这是一个伪代码示例: post_stream(‘127.0.0.1’, ‘/stream/’) do |body| generate_xml do |segment| body << segment end end

unit testingRuby块通过模拟与rr(是flexmock)

我如何对以下单元进行unit testing: def update_config store = YAML::Store.new(‘config.yaml’) store.transaction do store[‘A’] = ‘a’ end end 这是我的开始: def test_yaml_store mock_store = flexmock(‘store’) mock_store .should_receive(:transaction) .once flexmock(YAML::Store).should_receive(:new).returns(mock_store) update_config() end 如何测试块内部的内容? 更新 我已将我的测试转换为规范并切换到rr模拟框架: describe ‘update_config’ do it ‘calls transaction’ do stub(YAML::Store).new do |store| mock(store).transaction end update_config end end 这将测试调用的事务。 如何在块内测试: store[‘A’] = ‘a’ ?