Tag:

Ruby中的块和产量

我想了解块和yield ,以及他们如何在Ruby中工作。 如何使用yield ? 我看过的许多Rails应用程序都使用了一种奇怪的方式。 有人可以向我解释或告诉我去哪里了解他们吗?

块定义 – 大括号和do-end之间的区别?

任何人都可以解释为什么下面的代码中止与一个错误 irb(main):186:0> print ((1..10).collect do |x| x**2 end) SyntaxError: (irb):186: syntax error, unexpected keyword_do_block, expecting ')' print ((1..10).collect do |x| x**2 end) ^ (irb):186: syntax error, unexpected keyword_end, expecting $end print ((1..10).collect do |x| x**2 end) ^ from /usr/bin/irb:12:in `<main>' 而下面的代码具有相同的function如预期的那样工作? irb(main):187:0> print ((1..10).collect { |x| x**2 }) [1, 4, 9, 16, 25, 36, 49, […]

在Java中有一个“阻塞直到条件成真”的function吗?

我正在为一个服务器编写一个监听线程,目前我正在使用: while (true){ try { if (condition){ //do something condition=false; } sleep(1000); } catch (InterruptedException ex){ Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex); } } 有了上面的代码,我遇到了运行函数吃掉所有cpu时间循环的问题。 睡眠function的作品,但它似乎是一个临时修复,而不是解决scheme。 是否有一些函数会阻塞,直到variables“条件”变成“真”? 或者是持续循环等待一个variables的值改变的标准方法?

Ruby块的最佳解释?

Ruby块可以分享的最佳解释是什么? 使用和编写代码都可以阻止?

Ruby块语法错误

可能重复: Ruby块和非私有的参数 我不确定我是否理解这个语法错误。 我正在使用Carrierwave在Rails应用程序中pipe理一些file upload,而且我似乎正在错误地将一个块传递给其中一个方法。 以下是Carrierwave Docs中的示例: version :thumb do process :resize_to_fill => [200,200] end 这是我所拥有的: version :full { process(:resize_to_limit => [960, 960]) } version :half { process(:resize_to_limit => [470, 470]) } version :third { process(:resize_to_limit => [306, 306]) } version :fourth { process(:resize_to_limit => [176, 176]) } 上述不起作用,我得到syntax error, unexpected '}', expecting keyword_end 。 […]

编译器错误时,如果条件和没有大括号声明一个variables

为什么第一个编译好,第二个编译失败呢? if(proceed) {int i;} // This compiles fine. if(proceed) int i;// This gives an error. (Syntax error on token ")", { expected after this token)

函数返回块内的值

我正在使用AFNetworking从服务器获取数据: -(NSArray)some function { AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success: ^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSArray *jsonArray =[JSON valueForKey:@"posts"]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {} } 所以我在这里要做的是将jsonArray返回给函数。 显然返回不起作用。

将列表分成大致相等长度的N个部分

将列表分成大致相等的部分最好的办法是什么? 例如,如果列表中有7个元素并将其分成2个部分,我们希望在一个部分中获得3个元素,另一个元素应该包含4个元素。 我正在寻找像even_split(L, n)这样的将L分成n部分的东西。 def chunks(L, n): """ Yield successive n-sized chunks from L. """ for i in xrange(0, len(L), n): yield L[i:i+n] 上面的代码给出了3个块,而不是3个块。 我可以简单地转置(遍历这个,并采取每一列的第一个元素,调用第一部分,然后采取第二,把它放在第二部分等),但是破坏项目的顺序。

Hadoop进程logging如何跨越块边界进行拆分?

根据Hadoop – The Definitive Guide FileInputFormats定义的逻辑logging通常不适合HDFS块。 例如,一个TextInputFormat的逻辑logging是行,这将越过HDFS边界。 这对你的程序的function没有任何影响 – 例如,行不会被遗漏或损坏,但值得了解,因为它意味着数据本地映射(即在同一主机上运行的映射input数据)将执行一些远程读取。 这造成的轻微的开销通常并不重要。 假设一条logging线分成两个块(b1和b2)。 处理第一个块(b1)的映射器将注意到最后一行没有EOL分隔符,并从下一个数据块(b2)中提取剩余的行。 映射器如何处理第二个块(b2),确定第一个logging是不完整的,并且应该从块(b2)中的第二个logging开始处理?

什么是在块中迭代列表的最“pythonic”方式?

我有一个Python脚本,需要input一个整数列表,我需要一次处理四个整数。 不幸的是,我没有控制input,或者我将它作为四元组元素列表传入。 目前,我正在这样迭代它: for i in xrange(0, len(ints), 4): # dummy op for example code foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3] 它看起来很像“C-think”,这让我怀疑有一种更为pythonic的方式来处理这种情况。 该列表在迭代后被丢弃,所以不需要保存。 也许像这样会更好? while ints: foo += ints[0] * ints[1] + ints[2] * ints[3] ints[0:4] = [] 尽pipe如此,仍然不太“感觉”正确。 : – / 相关问题: 如何在Python中将列表分成均匀大小的块?