问题列表 - 第3484页

我如何勾选Perl的印刷品?

这是一个场景.您有大量遗留脚本,都使用公共库.所述脚本使用'print'语句进行诊断输出.脚本不允许任何变化 - 它们的范围广泛,得到了批准,并且早已离开了监督和控制的富有成效的山谷.

现在出现了新的需求:现在必须将日志记录添加到库中.这必须自动且透明地完成,标准库的用户无需更改其脚本.公共库方法可以简单地添加日志记录调用; 这是最简单的部分.困难的部分在于这些脚本的诊断输出始终使用'print'语句显示.必须存储此诊断输出,但同样重要的是,处理.

作为此处理的示例,库应仅记录包含"警告","错误","通知"或"注意"字样的打印行.下面的极其琐碎和被控制的示例代码(tm)将记录一些所述输出:

sub CheckPrintOutput
{
    my @output = @_; # args passed to print eventually find their way here.
    foreach my $value (@output) {
         Log->log($value) if $value =~ /warning|error|notice|attention/i;
    }
}
Run Code Online (Sandbox Code Playgroud)

(我想避免诸如"实际上应该记录什么","打印不应该用于诊断","perl糟透了"或"此示例有缺陷xy和z'等问题......这是为简洁和清晰而大大简化.)

基本问题归结为捕获和处理传递给print的数据(或任何perl builtin,沿着这些推理线).可能吗?有什么方法干净利落的吗?是否有任何具有钩子的记录模块可以让你这样做?或者它应该像瘟疫一样应该避免,我应该放弃捕获和处理打印输出?

附加:这必须运行跨平台 - 窗口和*nix相似.运行脚本的过程必须保持不变,脚本的输出也必须保持不变.

其他附加:在codelogic的回答评论中提出了一个有趣的建议:

您可以继承http://perldoc.perl.org/IO/Handle.html并创建自己的文件句柄来执行日志记录工作. - Kamil Kisiel

这可能会这样做,有两点需要注意:

1)我需要一种方法将此功能导出到使用公共库的任何人.它必须自动应用于STDOUT,也可能是STDERR.

2) IO :: Handle文档说你不能将它子类化,到目前为止我的尝试都没有结果.是否有任何特殊需要使子类化IO :: Handle工作?标准的'使用基础'IO :: Handle'然后覆盖new/print方法似乎什么都不做.

最终编辑:看起来像IO :: Handle是一个死胡同,但Tie :: Handle可能会这样做.感谢所有的建议; 他们都非常好.我将试试Tie :: Handle路线.如果它导致问题我会回来的!

附录:请注意,在使用了这个之后,我发现如果你没有做任何棘手的事情,Tie :: Handle会起作用.如果您使用IO :: Handle的任何功能与绑定的STDOUT或STDERR,它基本上是一个让它们可靠地工作的废话 - 我找不到一种方法来获得IO :: Handle的autoflush方法来处理我的绑定处理.如果我在绑上手柄之前启用了autoflush,它就能正常工作.如果这对您有用,可以接受Tie :: Handle路线.

printing perl hook tie

20
推荐指数
3
解决办法
6784
查看次数

可以使用哪些技术在JavaScript中定义类,以及它们的权衡取舍?

我更喜欢在大型项目中使用OOP,就像我现在正在研究的那样.我需要在JavaScript中创建几个类,但是,如果我没有弄错的话,至少有几种方法可以做到这一点.什么是语法,为什么会以这种方式完成?

我想避免使用第三方库 - 至少在开始时.
寻找其他答案,我找到了文章面向对象的JavaScript编程,第一部分:继承 - Doc JavaScript,讨论了JavaScript中的面向对象编程.是否有更好的继承方式?

javascript oop class

685
推荐指数
12
解决办法
33万
查看次数

什么语言的非常大的列表?

对于java.util中的数组和容器,Java(可能是底层的C-ish代码)的最大容量为Integer.MAX_VALUE(约20亿).是否有其他语言的容量更大的容器?

language-agnostic containers capacity

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

如何使用内联onclick属性停止事件传播?

考虑以下:

<div onclick="alert('you clicked the header')" class="header">
  <span onclick="alert('you clicked inside the header');">something inside the header</span>
</div>
Run Code Online (Sandbox Code Playgroud)

如何才能使用户点击跨度时,它不会触发div点击事件?

html javascript events dom

297
推荐指数
10
解决办法
42万
查看次数

Windows上的PNG TrayIcon透明度

我正在尝试使用透明的PNG作为我的Java应用程序的图标.JFrame和任务栏上的图像效果很好.但是,当我使用带有TrayIcon的图像时,我会在PNG边缘周围出现黑色哑光背景.

还有其他人遇到过这个问题吗?我真的想使用PNG而不是GIF或JPEG.

java png transparency trayicon

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

LINQ是否使用DataRelations来优化连接?

我无法在任何地方找到答案,在我开始使用Reflector生成代码之前我认为值得问:

假设我在DataSet中对DataTables运行以下LINQ查询:

var list = 
   from pr in parentTable.AsEnumerable()
   join cr in childTable.AsEnumerable() on cr.Field<int>("ParentID") equals pr.Field<int>("ID")
   where pr.Field<string>("Value") == "foo"
   select cr;
Run Code Online (Sandbox Code Playgroud)

如果父表与使用显示的关键字段的子表之间存在DataRelation,LINQ会使用它吗?也就是说,它会在父表中找到Value为"foo"的行,然后调用GetChildRows项目子行吗?

或者这是我必须明确指定的内容吗?(如果是这样,我该怎么做?)

c# linq join dataset datarelation

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

在Scheme中使用AND和apply函数

以下为什么不工作?

(apply and (list #t #t #f))
Run Code Online (Sandbox Code Playgroud)

虽然以下工作正常.

(apply + (list 1 3 2))
Run Code Online (Sandbox Code Playgroud)

这似乎是R5RS和R6RS的情况?

scheme

13
推荐指数
3
解决办法
8468
查看次数

可变金额重复计费

嗨,我正在寻找一个支付网关,可以进行每月更改的定期结算.Fogbugz这样做,他们根据当月有多少活跃用户收费.我发现的所有API只允许您设置固定金额,并且很难/不可能每月更改订阅金额.

有没有人遇到任何这样做的服务?

payment-gateway recurring-billing

13
推荐指数
2
解决办法
5050
查看次数

DI/IoC,NHibernate并帮助他们一起工作

我正试图了解DI/IoC,NHibernate并让它们在我正在开发的应用程序中很好地协同工作.我对NHibernate和DI/IoC都很陌生,所以不太确定我所做的是否是合理的方式.这是场景:

该应用程序为用户提供了计算特定金融交易的特定值(称为保证金)的能力.每个事务的marging值的计算是通过抽象MarginCalculator类的具体实现来执行的,并且要使用的具体实现取决于特定事务的产品类型(由产品对象的某个字段给出).具体的计算器类可通过产品类的属性访问.即

public class Transaction
{
    private double _margin;
    private Product _product;
    private Client _client;

    public double Margin { get; }
    public Product Product { get; }
    public Client Client { get; }

    public Transaction(Product p, Client c)
    {
        _product = p;
        _client = c;
    }

    public void CalculateMargin()
    {
        _margin = _product.MarginCalculator.CalculateMargin();
    }
}

public class Product
{
    private string _id;
    private string _productType;
    ... Other fields

    public string Id { get; }
    public string ProductType { get; } …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate dependency-injection inversion-of-control

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

用于c ++模板的Vim缩进?

有没有人知道或者知道vim插件/宏/函数是否能很好地缩进c ++模板?

当我在vim .hpp/.h文件中突出显示模板定义并用'='缩进它时,我得到这样的结果:

>     template <
>         class TFilter,
>               class TParser,
>               class TConsumer,
>               class TDataProcessor,
>               class TDataFeed,
>               class TSymbolMap
>                   >
>                   struct DataFeedTraits
>                   {
>                       typedef TFilter             Filter;
>                       typedef TParser<TSymbolMap> Parser;
>                       typedef TConsumer<Parser>   Consumer;
>                       typedef TDataProcessor<Filter,Consumer>  DataProcessor;
>                       typedef TDataFeed<Filter,DataProcessor,Parser,Ccnsumer> DataFeed;
>                   };
Run Code Online (Sandbox Code Playgroud)

我认为cindent将struct/class声明与结束括号">"对齐.我想最终得到类似的东西,或类似的,确切的格式无关紧要,只要格式化:

template <
    class TFilter,
    class TParser,
    class TConsumer,
    class TDataProcessor,
    class TDataFeed,
    class TSymbolMap
    >
struct DataFeedTraits
{
    typedef TFilter             Filter;
    typedef TParser<TSymbolMap> Parser;
    typedef …
Run Code Online (Sandbox Code Playgroud)

c++ vim templates pretty-print indentation

6
推荐指数
2
解决办法
3523
查看次数