标签: block

在Objective-C中,这个块有多大意义?

来自文档:

int (^Multiply)(int, int) = ^(int num1, int num2) {
    return num1 * num2;
};
int result = Multiply(7, 4); // result is 28
Run Code Online (Sandbox Code Playgroud)

它看起来很复杂 - 可以用函数完成同样的事情,或者不是吗?这个例子中的真正意义是什么?

iphone block objective-c

0
推荐指数
1
解决办法
234
查看次数

将参数传递给显式ruby块

您好我正在尝试学习红宝石块.但我很难克服这种结构:

class SomeApp

  attr_accessor :load_listener

  def on_load(&block)
    @load_listener = block
  end

  def load(x)
    @load_listener.call(x) if @load_listener
  end

end

app = SomeApp.new
app.on_load { |x| puts 'on load #{x}'} 
app.load(5)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这个代码的结果是'on load#{x}',而不是'on load 5' 任何帮助都是值得赞赏的.

ruby parameters block

0
推荐指数
1
解决办法
504
查看次数

雄辩的Ruby - 保存代码块以便稍后执行

在Eloquent Ruby中有一个我不明白的代码示例.

class Document
  attr_accessor :save_listener

  # most of the class omitted...

  def on_save( &block )
    @save_listener = block
  end

  def save( path )
    File.open( path, 'w' ) { |f| f.print( @contents ) }
    @save_listener.call( self, path ) if @save_listener
  end
end

# usage
my_doc = Document.new( 'block based example', 'russ', '' )
my_doc.on_save do |doc|
  puts "Hey, I've been saved!"
end
Run Code Online (Sandbox Code Playgroud)

为什么@save_listener.call( self, path )需要两个参数?保存的块看起来只有一个参数|doc|.这是书中的拼写错误还是我在这里缺少什么?

我甚至尝试输入此代码并执行它,我发现我可以添加任意数量的参数,并且不会出现任何错误.但我仍然不明白为什么在这个例子中有两个参数.

ruby block

0
推荐指数
1
解决办法
1618
查看次数

如何组合在iOS中返回值的块和方法?

我是iOS的新手,我正在试图弄清楚使用它们的正确方法.这是我的设置:

我有一个方法foo,它返回一个操作(RKObjectRequestOperation)成功与否.我为操作提供了一个成功块和一个失败块,所以在成功块中我想foo返回YES,并且在故障块中我想foo返回NO.

例如:

- (BOOL) foo {
    RKObjectRequestOperation *request = [[RKObjectRequestOperation alloc] initWithRequest:urlRequest responseDescriptors:responseDescriptors];

    [request setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
        NSLog(@"Success!");
        // return YES?
    } failure:^(RKObjectRequestOperation *operation , NSError *error) {
        NSLog(@"Failure!");
        // return NO?
    }];

    [request start];
}
Run Code Online (Sandbox Code Playgroud)

但是,据我所知,一个块只能返回自己的值; 它不能导致调用它的方法返回.它是否正确?如果是这种情况,我唯一能想到的就是foo将另一个块作为参数调用,该参数在成功或操作失败时调用.这个问题是从'foo`上调调用堆栈,我将不得不改变任何返回类型的方法返回void并接受一个块作为调用的参数.必须改变所有这些方法似乎过分.我在概念上遗漏了什么吗?

block objective-c ios objective-c-blocks

0
推荐指数
1
解决办法
945
查看次数

用于reduce/inject迭代器的Splat块参数

我已经定义了这样一个数组:

ary = [[0,1], [2,3]]
Run Code Online (Sandbox Code Playgroud)

运行以下代码:

ary.reduce(nil) do |a, i, k|
  puts "#{a.inspect} #{i.inspect} #{k.inspect}"
end
Run Code Online (Sandbox Code Playgroud)

在每次迭代中,我都期望变量a,i并且k分别保持accumulator(nil),第一个元素和内部数组的第二个元素的值,即我期望这个输出:

nil 0 1
nil 2 3
Run Code Online (Sandbox Code Playgroud)

但结果却是:

nil [0, 1] nil
nil [2, 3] nil
Run Code Online (Sandbox Code Playgroud)

为什么?我怎样才能达到我想要的效果?

此外,为什么下面的代码使用map正如我所期望的那样?

ary.map do |i, k|
  puts "#{i.inspect} #{k.inspect}"
end

# Output
# 0 1
# 2 3
Run Code Online (Sandbox Code Playgroud)

有什么不同?

ruby iterator block

0
推荐指数
1
解决办法
965
查看次数

Ruby块 - 除非和比较

我怀疑除非和ruby语言中的块.如果我愚蠢地问这个问题,请原谅.

让我们假设我们有两个布尔变量a = trueb = true.

条件:我想检查它们是否都是真的.使用if语句我们可以检查如下所示.

if a == true && b == true
  print "Hai"
end
Run Code Online (Sandbox Code Playgroud)

怀疑:我可以使用下面给出的那个,而不是上面的陈述吗?

unless a == false && b == false
  print "Hai"
end
Run Code Online (Sandbox Code Playgroud)

上面给出的两个块都会给出相同的结果吗?

ruby block

0
推荐指数
1
解决办法
1034
查看次数

执行外部命令时阻止Powershell

当您调用外部.exe命令时,如何使PowerShell阻塞直到外部结束?

powershell synchronization block

0
推荐指数
1
解决办法
102
查看次数

块如何在C++程序中工作

#include<iostream>
using namespace std;
int i=10;
int main()
{
  int i=20;
  cout<<i<<" "<<::i;
   {
     int i=30;           //from here
     cout<<endl<<i<<" "<<::i;
    }
  cout<<endl<<i<<" "<<::i<<endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

20 10
30 10
20 10
Run Code Online (Sandbox Code Playgroud)

在这里,我无法理解输出中'i'的最后一个值,为什么它不是30而不是30.

请看这里的评论,如果我替换int i = 30; I = 30; .

现在的输出是:

20 10
30 10
30 10
Run Code Online (Sandbox Code Playgroud)

为什么这里"i"的最后一个输出值相对于上面的代码而改变了.

最后一个最重要的问题是什么是使用块的应用?

c++ block output

0
推荐指数
1
解决办法
90
查看次数

阻止<a>内联<li>行为

下面的HTML/CSS结果让我觉得奇怪和意外,我真的在寻找解析它的方式背后的逻辑.

假设:

#nav {
  list-style-type-none
}
#nav li {
  display: inline;
}
/* make the LI's stack horizontally */

#nav li a {
  display: block;
  padding: 5px;
}
/* display as block to add padding */
Run Code Online (Sandbox Code Playgroud)
<ul id="nav">
  <li><a href="#">Home</a>
  </li>
  <li><a href="#">About us</a>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

这导致<li>垂直堆叠(如块元素),因为<a>它们显示为块元素.但我希望将<li>它们水平堆叠,因为我已将它们定义为内联元素.

这些<li>显示为内联,为什么内部元素<a>会影响它?

html css inline block

0
推荐指数
1
解决办法
2530
查看次数

需要在Ruby和block中使用一个方法

我编写代码来了解如何在块中使用方法:

def block_trial alfa, &block
  puts alfa

  block.call
end

block_trial "Trial" do ||
  puts "Komodo"
  another_method
end

def another_method
  puts "another_method"
end
Run Code Online (Sandbox Code Playgroud)

那种做法好吗?如何在块内使用其他方法?

这是我得到的错误:

block.rb:9:in `block in <main>': undefined local variable or method `another_method' for main:Object (NameError)
  from block.rb:4:in `call'
  from block.rb:4:in `block_trial'
  from block.rb:7:in `<main>'
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails block

0
推荐指数
1
解决办法
43
查看次数