小编Gra*_*rav的帖子

rac_signalForSelector:需要空实现

我有一个实现UICollectionViewDelegate协议的类.

我正在使用rac_signalForSelector:来注册这样的选择:

[self rac_signalForSelector:@selector(collectionView:didSelectItemAtIndexPath:)]
Run Code Online (Sandbox Code Playgroud)

但是只有在我离开collectionView的一个空实现时才会触发:didSelectItemAtIndexPath:这样:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    // Empty
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用rac_signalForSelector:fromProtocol:也没有运气.

我正在使用Reactive Cocoa 2.2.4

谢谢,Mikkel

objective-c ios reactive-cocoa

7
推荐指数
1
解决办法
1506
查看次数

使用MATLAB中的匿名函数来降低性能...还有其他人注意到这一点吗?

为了重构我的MATLAB代码,我认为我将函数作为参数(MATLAB称为匿名函数)传递,受函数式编程的启发.

然而,似乎表现受到严重打击.在下面的例子中,我比较了不同的方法.(代码片段包含在函数中以便能够使用子函数)

我得到的结果是直接0秒,使用子功能几乎0秒,使用匿名函数5秒.我在OS X 10.6上运行MATLAB 7.7(R2007b),在C2D 1.8 GHz上运行.

任何人都可以运行代码,看看他们得到了什么?我对Windows的性能特别感兴趣.

function [] = speedtest()


clear all; close all;

function y = foo(x)
    y = zeros(1,length(x));
    for j=1:N
        y(j) = x(j)^2;
    end
end

x = linspace(-100,100,100000);
N = length(x);


%% direct
t = cputime;

y = zeros(1,N);
for i=1:N
    y(i) = x(i)^2;
end

r1 = cputime - t;

%% using subfunction
t = cputime;
y = foo(x);
r2 = cputime - t;

%% using anon function
fn = @(x) x^2;

t = …
Run Code Online (Sandbox Code Playgroud)

performance matlab anonymous-function

6
推荐指数
1
解决办法
5451
查看次数

Scala中的惯用正则表达式匹配

我试图让我的Scala代码更加惯用.现在它看起来像Java代码.

我正在尝试在Scala中做一个简单的布尔正则表达式匹配函数,因为我似乎无法在标准库中找到它(?)

我不认为try-catch和所有的结果都特别好.另外,一个前提条件是'patt'只有一个组,我实际上并没有用它.有什么输入?

def doesMatchRegEx(subj:String, patt:scala.util.matching.Regex) = {
    try{
        val Match = patt
        val Match(x) = subj
        true
    } catch {
        // we didnt match and therefore got an error
    case e:MatchError => false
    }
}
Run Code Online (Sandbox Code Playgroud)

使用:

scala> doesMatchRegEx("foo",".*(foo).*".r)
res36: Boolean = true

scala> doesMatchRegEx("bar",".*(foo).*".r)
res37: Boolean = false
Run Code Online (Sandbox Code Playgroud)

regex scala

2
推荐指数
1
解决办法
941
查看次数

在C/C++中使用堆栈进行内存管理时的编码风格

来自Java背景,我正在尝试学习如何以最简单的方式处理C/C++中的内存(de)分配.

一位同事建议我只为成员变量分配内存,让堆栈处理局部变量.我不完全确定这个概念是什么,但它意味着函数将像这样实现:

void inc(int x, int &y){
  y=x+1;
}
Run Code Online (Sandbox Code Playgroud)

另一种方式是这样的:

int inc(int x, int &y){
  y=x+1;
  return y;
}
Run Code Online (Sandbox Code Playgroud)

第一个禁止我在表达式中使用它,即:

int y;
inc(2,y); 
inc(y,y);
Run Code Online (Sandbox Code Playgroud)

第二个确实如此,但它并不漂亮:

int y;
y=inc(inc(2,y),y);
Run Code Online (Sandbox Code Playgroud)

在我搞砸我的代码之前,经验丰富的C/C++程序员对这种编码风格有何看法?

c c++ memory stack

2
推荐指数
1
解决办法
256
查看次数

合并不同类型的信号

我正在创建一个音乐播放器,它将响应用户点击某个表格行,或者使用遥控器上的prev/next按钮.

为了获得表示第一种情况的当前播放曲目的索引的信号,我将其作为抽头行的函数,例如:

RACSignal *didSelectS = [[self rac_signalForSelector:@selector(tableView:didSelectRowAtIndexPath:)] map:...
Run Code Online (Sandbox Code Playgroud)

后一种情况,我使用scanWithStart:reduce:我传入+ 1/-1,这取决于用户按下哪个按钮并根据此返回一个新的绝对索引,例如.

RACSignal *prevS = [[remoteControlSignal filter:^BOOL(UIEvent *event) {
    return event.subtype == UIEventSubtypeRemoteControlPreviousTrack;
}] mapReplace:@-1];

RACSignal *nextS = [... mapReplace:@1];

RACSignal *trackIdxS = [RACSignal merge:@[nextS, prevS]] 
                                 scanWithStart:@0
                                 reduce:^id(NSNumber *running, NSNumber *next) {
                                   return @(running.integerValue + next.integerValue);
                                 }];
Run Code Online (Sandbox Code Playgroud)

我的问题是,我如何将这两者结合起来?一种解决方案是将值包装在一个对象中,这样我在scanWithStart:reduce中就可以区分绝对值或相对值,例如:

RACSignal *currentIndexSignal = [[RACSignal merge:@[didSelectS, prevS, nextS] scanWithStart:@0 reduce:^id(NSNumber *running, id next){
   if ([next isKindOfClass:[PrevNextValueWrapper class]]){
     // next is a wrapped relative value, eg -1/+1
     return @(running.integerValue + next.wrappedNumber.integerValue)
   } else {
     // next …
Run Code Online (Sandbox Code Playgroud)

reactive-cocoa

2
推荐指数
1
解决办法
445
查看次数