小编Ken*_*Y-N的帖子

rails activerecord,friend relation + inverse_friend关系如何获得相互关系?代码包括在内

试图找到相互关系,在朋友关系中,已经有朋友和inverse_friends.但是如何将它们结合起来以获得共同的朋友呢? 似乎无法弄明白我尝试了几个选项并在网上搜索了很长时间,只是看不到它

  has_many :friendships
  has_many :friends, :through => :friendships
  has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
  has_many :inverse_friends, :through => :inverse_friendships, :source => :user
Run Code Online (Sandbox Code Playgroud)

怎么得到一个

has_many :mutual_friends ?
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails mutual-friendship

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

在代码块中找不到fontconfig / fontconfig.h

我正在尝试在Ubuntu 14的Codeblocks IDE中构建Cocos2d-x项目fontconfig/fontconfig.h。编译时未发现错误。我被困在这里。我该如何解决?

codeblocks cocos2d-x

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

在java中初始化0588235294117647值

当我得到一个输入为长数据类型时,编译器不接受以下数字

0588235294117647
Run Code Online (Sandbox Code Playgroud)

但是如果我将零置于第一个位置以外的位置,则执行它.

如何声明以零开头的长号码?

我的意见

0588235294117647L------->Error
Run Code Online (Sandbox Code Playgroud)

改变之后

5088235294117647L------->No Error
Run Code Online (Sandbox Code Playgroud)

java

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

C - Strcmp()不起作用

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{

const int SIZE = 100;

char input[SIZE];

while(1)
{
    fgets (input, SIZE - 2, stdin);          // input
    printf("%d", strcmp(input, "exit"));    //returining 10 instead of 0

    if(strcmp(input, "exit") == 0)
    {
        printf("SHELL Terminated\n");
        exit(0);    
    }

return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正面临一个问题.如果我在变量中输入exitinput,则函数strcmp()返回10,但它应该返回0并退出程序,因为exit等于exit.但事实并非如此.

我找不到问题.

c strcmp

1
推荐指数
3
解决办法
932
查看次数

了解CUDA shfl指令

我已经阅读了Shuffle Tips and Tricks文章,但我不确定如何将它应用于我继承的一些狡猾的代码:

extern __shared__ unsigned int lpSharedMem[];
int tid = threadIdx.x;
lpSharedMem[tid] = startValue;
volatile unsigned int *srt = lpSharedMem;

// ...various stuff
srt[tid] = min( srt[tid], srt[tid+32] );
srt[tid] = min( srt[tid], srt[tid+16] );
srt[tid] = min( srt[tid], srt[tid+8] );
srt[tid] = min( srt[tid], srt[tid+4] );
srt[tid] = min( srt[tid], srt[tid+2] );
srt[tid] = min( srt[tid], srt[tid+1] );
__syncthreads();
Run Code Online (Sandbox Code Playgroud)

即使没有CUDA,这段代码也很狡猾,但看看这个实现,我看到:

__device__ inline int min_warp(int val) {
    val = min(val, __shfl_xor(val, 16));
    val = …
Run Code Online (Sandbox Code Playgroud)

c++ cuda

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

有条件地获得std :: mutex

我有一个使用GPU的多线程应用程序,它本身就是单线程的,我使用的实际API cv::gpu::FAST_GPU,当我尝试使用多线程时会崩溃,所以基本上我有:

static std::mutex s_FAST_GPU_mutex;

{
    std::lock_guard<std::mutex> guard(s_FAST_GPU_mutex);
    cv::gpu::FAST_GPU(/*params*/)(/*parameters*/);
}
Run Code Online (Sandbox Code Playgroud)

现在,对代码进行基准测试显示我FAST_GPU()处于隔离状态比CPU快FAST(),但在实际应用程序中,我的其他线程花费大量时间等待锁定,因此整体吞吐量更差.

仔细阅读文档,在这个答案中,这似乎是可能的:

static std::mutex s_FAST_GPU_mutex;
static std::unique_lock<std::mutex> s_FAST_GPU_lock(s_FAST_GPU_mutex, std::defer_lock);

{
    // Create an unlocked guard
    std::lock_guard<decltype(s_FAST_GPU_lock)> guard(s_FAST_GPU_lock, std::defer_lock);
    if (s_FAST_GPU_lock.try_lock())
    {
        cv::gpu::FAST_GPU(/*params*/)(/*parameters*/);
    }
    else
    {
        cv::FAST(/*parameters*/);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这不会编译为std::lock_guard只接受a std::adopt_lock.我该如何正确实现?

c++ opencv mutex c++11

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

分割图像并命名每一半

我有从立体相机捕获的图像,我想将其分成左半部分和右半部分。如果我做:

convert stereo0000.png -crop 50%x100% foo.png
Run Code Online (Sandbox Code Playgroud)

我得到foo-0.png并且foo-1.png;我如何得到foo-left.pngfoo-right.png. 如果我能做类似的事情,就会得到奖励积分:

convert stereo*.png -crop 50%x100% foo-%d.png
Run Code Online (Sandbox Code Playgroud)

就 get foo-0left.pngfoo-0right.pngfoo-1left.pngfoo-1right.png等而言,这给了我stereo0000.png-> ( foo-0.png, foo-1.png), stereo0001.png-> ( foo-2.png, foo-3.png) ,这并不是那么有用。

理想情况下,解决方案只是对通配符输入文件模式进行一次调用convert,因为我可以相对轻松地编写一个 shell 脚本,在一次调用后重命名这对文件。

linux imagemagick-convert

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

程序的意外输出

我用 C++ 编写了一个基本程序,如下所示:

#include <iostream>
using namespace std;

class asd {
  int a,b;
  public:

  asd(int a, int b): a(a),b(b){}

  void set(int a, int b) {
    a = a + a;
    b = b + b;
  } 

  void show() {
    cout<<"a: "<<a<<" b :"<<b<<"\n";
  }
};

int main() {
  asd v(5,4);
  v.show();
  v.set(1,6);
  v.show();
   
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它的输出相当惊人 a: 5 b: 4 a: 5 b: 4

为什么 a 和 b 的值没有改变。如果我替换 set() 函数如下

void set(int x, int y) {
  a = …
Run Code Online (Sandbox Code Playgroud)

c++ class

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

在Javascript中使用if/else嵌套for循环

当我使用它时,我只是不明白为什么

for(in=1; in<=3;in++) {
    for(out=1; out<=2; out++) {
        console.log('*')
    }
}
Run Code Online (Sandbox Code Playgroud)

它打印出6颗星似乎对我而言,当我和if/else这样使用时,

for(in=0; in<=3; in++) {
    for(out=0; out<=2; out++) {
        if(in == 9) {
            console.log('inside');
        }
    }
    console.log('outside');
}
Run Code Online (Sandbox Code Playgroud)

(外面)会打印4次我真的不明白它为什么会这样?

javascript for-loop nested

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

对于循环执行,增加混淆

为什么我不明白这一点 ifillArray方法,最终等于10即使阵得分仅填充最多index 9.

根据我的理解i必须小于10,所以如何最终10结束,它应该增加.

我尝试了另一个循环来测试for循环是否在条件为真时执行递增.

在测试循环中i最终只有10个有意义,但两个for循环相矛盾.

public class GoldScores {
        public static final int MAX_NUMBER_SCORES = 10;
        public static void main(String[] args) {
            double[] score = new double[MAX_NUMBER_SCORES];
            int numberUsed = 0;

            System.out.println("This program reads gold scores and shows");
            System.out.println("how much each differs from the average.");
            System.out.println("Enter gold scores:");
            //numberUsed = fillArray(score);
        //  showdifference(score,numberUsed);
             for(int i=1; i<11; i++){                   //Test loop
                 System.out.println("Count is: " + i); …
Run Code Online (Sandbox Code Playgroud)

java eclipse arrays for-loop

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