使用以下代码:
def index
@q = ""
@q = params[:search][:q] if params[:search]
q = @q
@search = Sunspot.search(User) do
keywords q
end
@users = @search.results
end
Run Code Online (Sandbox Code Playgroud)
如果使用@q而不是q,则搜索始终返回空查询("")的结果.为什么是这样?@q变量是否对do ... end块不可用?
我最近尝试做类似于此的事情:
a = "some string"
b = Proc.new{ upcase }
a.instance_eval b
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
TypeError:无法将Proc转换为String
但这有效:
def b(&block)
"some string".instance_eval &block
end
b{ upcase }
Run Code Online (Sandbox Code Playgroud)
进一步了解这种方法:
def b(&block)
"some string".instance_eval block
end
Run Code Online (Sandbox Code Playgroud)
产生相同的Proc to String
错误.
所以...我对块的理解是它们只是触发器.但是这个&
&符号显然有一些特别之处......
谁可以给我解释一下这个?是否有可能将正常的proc转换成&block
对象的特殊之处?
刚刚想出了我的第二个问题,在前面加了一个&
...这很容易,但这是真的在做什么?
我想@synchronized块不依赖于对象,但依赖于线程......对吗?在那种情况下,为什么我们通过自我?
我的理解是ruby块具有块范围,并且块内创建的所有变量将仅在块内生存.
示例案例:
food = ['toast', 'cheese', 'wine']
food.each { |food| puts food.capitalize}
puts food
Run Code Online (Sandbox Code Playgroud)
输出:
"Toast"
"Cheese"
"Wine"
"Wine"
Run Code Online (Sandbox Code Playgroud)
如果你把food
块中的变量(每个块),我的理解是它有块范围.它仅存在于块范围内,并且对外部变量没有任何影响food
.
但行为不同,food
在这种情况下修改了名为的外部变量.这种理解是否正确,在ruby中我们是否有块范围?
我有一个小的统计数据块,我想在几个地方可用:用户的个人资料页面和一个用户列表的搜索页面.
重复这个区块的最佳方法是什么?我来自PHP背景,在PHP中,它将是一个简单的包含传递一些简单的参数.在django中,我基本上希望能够调用类似于:
{% stats_block user %}
Run Code Online (Sandbox Code Playgroud)
其中user是包含所有用户信息的对象.我在想一个简单的模板标签,但是这个块非常大,我不想把eveything放在模板标签的一行中.
非常感谢!
我正在使用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) {}
}
Run Code Online (Sandbox Code Playgroud)
所以我在这里要做的是将jsonArray返回给函数.显然返回不起作用.
我正在使用AFNetworking下载我的应用程序用于同步解决方案的文件.在某些时候,应用程序会将一系列文件作为批处理单元下载.按照这个例子,我像这样运行批处理:
NSURL *baseURL = <NSURL with the base of my server>;
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL];
// as per: https://stackoverflow.com/a/19883392/353137
dispatch_group_t group = dispatch_group_create();
for (NSDictionary *changeSet in changeSets) {
dispatch_group_enter(group);
AFHTTPRequestOperation *operation =
[manager
POST:@"download"
parameters: <my download parameters>
success:^(AFHTTPRequestOperation *operation, id responseObject) {
// handle download success...
// ...
dispatch_group_leave(group);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// handle failure...
// ...
dispatch_group_leave(group);
}];
[operation start];
}
// Here we wait for all the requests to …
Run Code Online (Sandbox Code Playgroud) 编辑:似乎,至少在这种情况下,转置网格对L2缓存带宽有负面影响.这是从视觉分析器获得的.原因尚不清楚.
我已经到了需要转置CUDA网格的GPU计算情况.因此,如果block_ {x,y}最初作用于数据区域d_ {x,y},则它现在作用于数据区域d_ {y,x},因此block_ {y,x}将作用于数据区域d_ {x, y}.下图显示了一个示例.
值得一提的是,线程不会在每个块内部进行转置,也就是说,一旦定位了块,threadIdx.x和threadIdx.y值分别以正常方式用于它们的x和y偏移.
据我所知,理论上这个设计应该不会对性能产生任何影响,因为内存合并模式仍然保留,即块内的线程没有转置,只是网格重新排列其块.但是我发现在转置网格时,内核运行大约.比正常情况慢2倍.我做了一个玩具示例来说明情况.
? transpose-grid ./prog 10000 10000 100 0
init data.....................done: zero matrix of 10000 x 10000
copy data to GPU..............done
preparing grid................done: block(32, 32, 1), grid(313, 313, 1)
normal_kernel (100 rep).......done: 0.935132 ms
verifying correctness.........ok
? transpose-grid ./prog 10000 10000 100 1
init data.....................done: zero matrix of 10000 x 10000
copy data to GPU..............done
preparing grid................done: …
Run Code Online (Sandbox Code Playgroud) 以下是我在NSTimer上的Objective-C类别,用于对NSTimers进行基于块的触发.我看不出它有什么问题,但我得到的是我传入schedule...
方法的块正在被解除分配,尽管我要求copy
它.
我错过了什么?
typedef void(^NSTimerFiredBlock)(NSTimer *timer);
@implementation NSTimer (MyExtension)
+ (void)timerFired:(NSTimer *)timer
{
NSTimerFiredBlock blk = timer.userInfo;
if (blk != nil) {
blk(timer);
}
}
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds
repeats:(BOOL)repeats
callback:(NSTimerFiredBlock)blk
{
return [NSTimer scheduledTimerWithTimeInterval:seconds
target:self
selector:@selector(timerFired:)
userInfo:[blk copy]
repeats:repeats];
}
@end
Run Code Online (Sandbox Code Playgroud) 我只是begin...end
在Erlang的文档(这里)中踩了一脚,但它没有给出一些如何有用的例子.
在StackOverflow中查看我发现了两个人们将要使用的情况begin...end
,两者都在列表推导中:
但我想知道是否有更多此类用途.
任何人都可以提供另一种方案,其中a begin...end
在Erlang中有用吗?
谢谢
block ×10
objective-c ×3
ruby ×3
ios ×2
scope ×2
afnetworking ×1
c++ ×1
cuda ×1
django ×1
erlang ×1
expression ×1
instance ×1
lambda ×1
macos ×1
performance ×1
proc-object ×1
slowdown ×1