小编xia*_*ian的帖子

在ActiveRecord中覆盖"查找"DRY方式

我有一些模型需要在其上放置自定义查找条件.例如,如果我有一个Contact模型,每次调用Contact.find时,我想限制返回的仅属于正在使用的Account的联系人.

我通过谷歌找到了这个(我已经定制了一点):

def self.find(*args)
  with_scope(:find => { :conditions =>  "account_id = #{$account.id}" }) do
    super(*args)
  end
end
Run Code Online (Sandbox Code Playgroud)

这很有效,除了少数几个account_id不明确的情况,所以我把它改编成:

def self.find(*args)
  with_scope(:find => { :conditions =>  "#{self.to_s.downcase.pluralize}.account_id = #{$account.id}" }) do
    super(*args)
  end
end
Run Code Online (Sandbox Code Playgroud)

这也很好,但是,我希望它是干的.现在我有一些不同的模型,我希望使用这种功能.做这个的最好方式是什么?

当你回答时,请包含代码,以帮助我们的思想掌握元编程Ruby-fu.

(我正在使用Rails v2.1)

ruby activerecord overriding metaprogramming ruby-on-rails

5
推荐指数
2
解决办法
6658
查看次数

缩进代码生成

通常,程序员编写生成其他代码的代码.

(技术术语是元编程,但它比仅仅交叉编译器更常见;考虑生成HTML或每个XSLT文件的每个PHP网页.)

一个领域,我觉得挑战性的未来与技术,以确保这两个手写的源文件,以及计算机生成的对象文件明确缩进来帮助调试.这两个目标似乎经常相互竞争.

我发现这在PHP/HTML组合中特别具有挑战性.我认为这是因为:

  • 源文件中有时会生成比生成PHP更多的HTML代码
  • HTML文件往往比SQL语句更长,需要更好的缩进
  • HTML具有空间敏感功能(例如标签之间)
  • 结果是比SQL语句更公开可见的HTML,因此要做更合理的工作会有更大的压力.

你用什么技术来解决这个问题?


编辑:我接受至少有三个参数不打扰生成漂亮的HTML代码:

  • 生成代码的复杂性增加了.
  • 浏览器渲染没有区别; 开发人员可以使用Firebug或类似功能来很好地查看它.
  • 轻微的性能损失 - 增加了空白字符的下载时间.

我当然有时会生成代码而不考虑缩进(尤其是SQL).

但是,有一些论点推动了另一种方式:

  • 我发现,在实践中,我频繁读取生成的代码-有额外的步骤来访问它是不方便的.
  • HTML有一些空间敏感问题,偶尔会有一些问题.

例如,考虑代码:

<div class="foo">
    <?php
        $fooHeader();
        $fooBody();
        $fooFooter();
    ?>
</div>
Run Code Online (Sandbox Code Playgroud)

它比以下代码更清晰:

<div class="foo"><?php
        $fooHeader();
        $fooBody();
        $fooFooter();
?></div>
Run Code Online (Sandbox Code Playgroud)

但是,由于HTML中包含的空格,它也有不同的渲染.

php code-generation metaprogramming

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

Microsoft Visual Studio(2008) - 在解决方案资源管理器中过滤

在使用C++项目时的解决方案资源管理器中,有标题文件,资源文件和源文件的标准过滤器.我想要完成的主要是按文件夹过滤.


让我们说文件的结构是这样的:

  • ../Folder1/Source1.cpp
  • ../Folder1/Header1.h
  • ../Folder1/Source2.cpp
  • ../Folder1/Header2.h
  • ../AnotherFolder/Source1.cpp
  • ../AnotherFolder/Header1.h
  • ../AnotherFolder/Source2.cpp
  • ../AnotherFolder/Header2.h
  • ../SomeOtherSource.cpp

在解决方案资源管理器中,它看起来像:

  • 头文件/ Header1.h
  • 头文件/ Header1.h
  • 头文件/ Header2.h
  • 头文件/ Header2.h
  • 源文件/ SomeOtherSource.cpp
  • 源文件/ Source1.cpp
  • 源文件/ Source1.cpp
  • 源文件/ Source2.cpp
  • 源文件/ Source2.cpp

我希望看起来像这样:

  • 头文件/ AnotherFolder/Header1.h
  • 头文件/ AnotherFolder/Header2.h
  • 头文件/ Folder1/Header1.h
  • 头文件/ Folder1/Header2.h
  • 源文件/ AnotherFolder/Source1.cpp
  • 源文件/ AnotherFolder/Source2.cpp
  • 源文件/ Folder1/Source1.cpp
  • 源文件/ Folder1/Source2.cpp
  • 源文件/ SomeOtherSource.cpp

这将如何实现?

c++ visual-studio-2008 visual-studio visual-c++ solution-explorer

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

C ++-绕行WinSock挂钩

我想做的是使用Detours库将WinSock2 send()和recv()函数(数据包记录器)连接到应用程序中。

尽管它确实适用于send()函数,但不适用于recv()函数。

这是我的相关代码:

#include <cstdio>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <string>
#include <windows.h>
#include <detours.h>

#pragma comment( lib, "Ws2_32.lib" )
#pragma comment( lib, "detours.lib" )
#pragma comment( lib, "detoured.lib" )
#pragma comment( lib, "Mswsock.lib" )

std::ofstream Logger;

std::string NowToString() {
    time_t rawtime;
    tm *timeinfo = new tm();
    char buffer[32];

    time( &rawtime );
    localtime_s( timeinfo, &rawtime );

    strftime( buffer, 32, "%m/%d/%Y %I:%M:%S %p", timeinfo );

    delete timeinfo;

    return std::string( buffer );
}

std::string TimeToString() {
    time_t …
Run Code Online (Sandbox Code Playgroud)

c++ hook detours winsock recv

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

C++声音处理

我正在寻找一个可用于处理音频文件的库.基本上我想做的是:

  1. 加载MP3/WAV文件

  2. 获取该文件的15秒剪辑

  3. 覆盖其上的另一个MP3/WAV文件

  4. 渲染为新的MP3/WAV文件

c++ audio signal-processing

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

使用动态生成的类进行Ruby异常继承

我是Ruby的新手,所以我在理解我遇到的这个奇怪的异常问题时遇到了一些麻烦.我正在使用ruby-aaws gem访问Amazon ECS:http://www.caliban.org/ruby/ruby-aws/.这定义了一个类Amazon :: AWS:错误:

module Amazon
  module AWS
    # All dynamically generated exceptions occur within this namespace.
    #
    module Error
      # An exception generator class.
      #
      class AWSError
        attr_reader :exception

        def initialize(xml)
          err_class = xml.elements['Code'].text.sub( /^AWS.*\./, '' )
          err_msg = xml.elements['Message'].text

          unless Amazon::AWS::Error.const_defined?( err_class )
            Amazon::AWS::Error.const_set( err_class,
                    Class.new( StandardError ) )
          end

          ex_class = Amazon::AWS::Error.const_get( err_class )
          @exception = ex_class.new( err_msg )
        end
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这意味着如果你得到一个类似的错误代码AWS.InvalidParameterValue,这将产生(在它的异常变量中)一个新类Amazon::AWS::Error::InvalidParameterValue,它是一个子类StandardError.

现在这里变得奇怪了.我有一些看起来像这样的代码: …

ruby metaprogramming exception

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

为什么我的Ruby代码中出现"错误的参数数量(0 for 2)"异常?

我试图通过从"测试驱动开发:通过示例"重写Kent Beck的xUnit Python示例来改进我的Ruby.我已经走得很远了,但是现在我运行的时候出现了以下错误.

C:\Documents and Settings\aharmel\My Documents\My Workspace\TDD_Book\TDDBook_xUnit_RubyVersion\lib\main.rb:21:in `test_running': wrong number of arguments (0 for 2) (ArgumentError)
    from C:\Documents and Settings\aharmel\My Documents\My Workspace\TDD_Book\TDDBook_xUnit_RubyVersion\lib\main.rb:21:in `run'
    from C:\Documents and Settings\aharmel\My Documents\My Workspace\TDD_Book\TDDBook_xUnit_RubyVersion\lib\main.rb:85
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像这样:

class TestCase
  def initialize(name)
    puts "1.  inside TestCase.initialise: @name: #{name}"
    @name = name
  end
  def set_up
    # No implementation (but present to be overridden in WasRun) 
  end
  def run
    self.set_up
    self.send @name  # <<<<<<<<<<<<<<<<<<<<<<<<<= ERROR HERE!!!!!!
  end
end

class WasRun < TestCase
  attr_accessor :wasRun
  attr_accessor :wasSetUp 

  def initialize(name)
    super(name) …
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming xunit

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

C++元模板是否需要程序员的知识?

根据我的经验,元模板真的很有趣(当你的编译器符合要求时),并且可以提供良好的性能提升,幸运的是我被经验丰富的C++程序员所包围,这些程序员也会使用元模板,但偶尔会有新的开发人员到来并且可以'使我们使用的一些元模板技巧的头部或尾部(主要是Andrei Alenxandrescu的东西),持续几周,直到他适当地启动.

所以我想知道其他C++程序员的情况是什么?元模板编程应该是C++程序员应该"必须"知道的(当然不包括入门级学生)吗?

编辑:注意我的问题与生产代码有关,而不是很少的样品或原型

c++ metaprogramming

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

如何在不使用额外模板参数的情况下使用模板模板参数声明/定义类

考虑以下模板模板参数的使用......

#include <iostream>

template <typename X>
class A
{
    X _t;
public:
    A(X t)
        :_t(t)
    {
    }
    X GetValue()
    {
        return _t;
    }
};

template <typename T, template <typename T> class C >
class B
{
    C<T> _c;
public:
    B(T t)
        :_c(t)
    {
    }
    T GetValue()
    {
        return _c.GetValue();
    }
};

using namespace std;

int main()
{
    B<int, A> b(10);
    cout<<b.GetValue();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法可以删除模板参数T?例如,是否有办法进行以下工作?

//Does not compile
template <template <typename T> class C >
class B
{
    C _c; …
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming

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

需要编程algorithem非常快,我应该作为PHP扩展,或其他一些?

我的大部分应用程序都是用PHP编写的(前端和后端).有一部分工作太慢,我需要重写它,可能不是用PHP.什么会给我以下内容:
1.速度最快
2.最快的发展
3.易于维护.

我在脑海中将CPP中的这段代码重写为PHP扩展,但可能是我被锁定在这个解决方案上而错过了一些更简单/更好的解决方案?

每次运行时,算法都是几个MB数据上的PorterStemmerAlgorithm.

php c++ php-extension

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