草庐IT

objective-c-blocks

全部标签

ruby "yield row if block_given?"

这个问题在这里已经有了答案:WhydoesRubyuseyield?(4个答案)关闭8年前。#GetourdatabackdefqueryNewsTable@conn.exec("SELECT*FROMnewslib")do|result|result.eachdo|row|yieldrowifblock_given?endendend对于这段代码。我不太明白yieldrowifblock_given?谁能指出任何关于此的好文章,或者你可以简单地向我解释一下非常感谢

ruby /Rspec : Possible to compare the content of two objects?

我在ruby​​中创建了2个不同的对象,它们具有完全相同的属性和值。现在我想比较两个对象的内容是相同的,但进行以下比较:actual.should==expectedactual.shouldeq(expected)actual.should(beexpected)失败:Diff:@@-1,4+1,4@@-#在rspec/ruby中有什么方法可以轻松实现这一点吗?干杯! 最佳答案 执行此操作的惯用方法是覆盖#==运算符:classStationdef==(o)primary_key==o.primary_keyenddefhashp

ruby: block 可以影响方法中的局部变量吗?

我只是在学习ruby​​并试图理解block中执行的代码的范围。例如,我希望能够创建一个block来影响它附加到的方法,如下所示:deftest(&block)block.call()ifblock_given?puts"intest,foois#{foo}"puts"intest,baris#{bar}"endtest(){foo="thisisfoo"bar="thisisbar"}在这种情况下,我根本不想修改block——我希望能够使用简单的变量引用而不使用参数来编写它。只有修改上面例子中的'test'方法,才能访问block中定义的变量吗?同样,目标是不修改block,但能够在

ruby - 与 Smalltalk 相比,Ruby 中的 block

Ruby中的block是什么意思?它看起来与Smalltalk类似,但您不能向它发送消息。例如,在smalltalk中:[:x|x+3]value:3返回6。但是在ruby​​中:{|x|x+3}.call3会导致语法错误。不过,您可以在ruby​​中将消息传递给lambda:irb(main):025:0>->(x){x+3}.call3=>6那么在Ruby中,block不是block,而lambda是block?这是真的?我的意思是,rubylambda和smalltalkblock之间有什么区别吗?如果这是真的,那么什么是rubyblock?更新:根据下面的评论和回答,再加上一些

ruby - 是否有与 Rspec 的 “mock().as_null_object” 等效的 Mocha?

是否有与Rspec的“mock().as_null_object”等效的Mocha? 最佳答案 是的。使用“stub_everything()”记录在此处:http://mocha.rubyforge.org/classes/Mocha/API.html#M000004. 关于ruby-是否有与Rspec的“mock().as_null_object”等效的Mocha?,我们在StackOverflow上找到一个类似的问题: https://stackover

ruby - Ruby 的 Object#const_get 是如何工作的?

我最近发现Ruby(2.2.1)有一些“有趣”的行为。moduleFooclassFooendclassBarendendFoo.const_get('Foo')#=>Foo::FooFoo.const_get('Bar')#=>Foo::BarFoo.const_get('Foo::Foo')#=>FooFoo.const_get('Foo::Bar')#=>NameError:uninitializedconstantFoo::Foo::BarFoo.const_get('Foo::Foo::Bar')#=>Foo::BarFoo.const_get('Foo::Foo::Foo:

ruby - 打印 Ruby block 的源代码

我有一个采用block的方法。显然我不知道要传递什么,并且出于奇怪的原因我不会进入这里,我想打印block的内容。有办法吗? 最佳答案 您可以使用实现了to_ruby方法的Ruby2Ruby来做到这一点。require'rubygems'require'parse_tree'require'parse_tree_extensions'require'ruby2ruby'defmeth&blockputsblock.to_rubyendmeth{somecode}将输出:"proc{some(code)}"我还会查看Github的Ch

ruby - 是否可以使用 block 定义 Ruby 单例方法?

所以,我想为一个对象定义一个单例方法,但我想用闭包来实现。例如,defdefine_say(obj,msg)defobj.sayputsmsgendendo=Object.newdefine_sayo,"helloworld!"o.say这不起作用,因为通过“def”定义单例方法不是闭包,所以我得到一个异常,“msg”是undefinedvariable或方法。我想做的是在Module类中使用“define_method”方法,但据我所知,这只能用于在类上定义一个方法......但我想要一个单例方法...所以,我很想这样写:defdefine_say(obj,msg)obj.defin

ruby - 用 block 初始化对象

是否可以像下面这样用block初始化一个对象?classFooattr_reader:bar,:bazdefinitialize(bar,baz)@bar,@baz=bar,bazendendFoo.newdo|bar,baz|#somelogictobeimplemented#@bar,@baztobeassignedend 最佳答案 当然,你可以在initialize中yield,这没什么特别的:classFooattr_accessor:bar,:bazdefinitializeyieldselfendendFoo.newdo

ruby - 如果值不为零,有条件地在 Ruby 中执行 block ? (又名 Smalltalk 的 ifNotNilDo :)

在Smalltalk中有方法ifNotNilDo:它是这样使用的:databasegetUserifNotNilDo:[:user|MailsendTo:user]在不是nil的对象上执行block,将对象本身作为参数传递。UndefinedObject类(Smalltalk等同于Ruby的NilClass)中的实现什么也不做。这样,如果获取用户的结果是nil对象,则什么也不会发生。我不知道Ruby有类似的东西,所以我推出了自己的解决方案。它是这样的:classObjectdefnot_nilyield(self)endendclassNilClassdefnot_nil#donoth