小编Kon*_*lph的帖子

使用源代码与解析和评估有什么注意事项?

精简版

我可以更换吗?

source(filename, local = TRUE, encoding = 'UTF-8')
Run Code Online (Sandbox Code Playgroud)

eval(parse(filename, encoding = 'UTF-8'))
Run Code Online (Sandbox Code Playgroud)

没有任何破损的风险,使UTF-8源文件在Windows上运行?

长版

我目前正在通过加载特定的源文件

source(filename, local = TRUE, encoding = 'UTF-8')
Run Code Online (Sandbox Code Playgroud)

但是,众所周知,这不适用于Windows,完全停止.

作为一种解决方法,Joe Cheng建议使用

eval(parse(filename, encoding = 'UTF-8'))
Run Code Online (Sandbox Code Playgroud)

这看起来效果很好1,但即使在查阅了源代码之后source,我也不明白它们在一个关键细节上的区别:

双方sourcesys.source不是简单地parse,然后eval将文件内容.相反,他们解析文件内容,然后在解析的表达式上手动迭代,然后eval逐个迭代.我不明白为什么这是必要的sys.source(source至少用它来显示详细的诊断,如果有这样的指示;但sys.source不做任何类似的事情):

for (i in seq_along(exprs)) eval(exprs[i], envir)
Run Code Online (Sandbox Code Playgroud)

eval单独声明语句的目的是什么?为什么它直接在子表达式上迭代索引?还有什么其他警告?

为了澄清:我关心其他参数sourceparse …

eval r

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

makefile中CXX的值来自哪里?

代码片段:

target_test : test.cc 
    $(CXX) $(CPPFLAGS) $(CFLAGS) test.cc
Run Code Online (Sandbox Code Playgroud)

我知道这CXX是一个变量(包含要调用的编译器命令),但我想知道这个变量来自哪里.该变量未在makefile中定义,也不是环境变量.任何人都可以解释它的价值CXX来自哪里?

c c++ makefile

42
推荐指数
2
解决办法
4万
查看次数

在HTML中,与<strong>相反的是什么?

<strong>HTML中是否存在相反的标记?还是会在HTML5中引入?

html tags xhtml html5

40
推荐指数
3
解决办法
3万
查看次数

对unique_ptrs集的原始指针查找

我经常发现自己想写这样的代码:

class MyClass
{
public:
  void addObject(std::unique_ptr<Object>&& newObject);

  void removeObject(const Object* target);

private:
  std::set<std::unique_ptr<Object>> objects;
};
Run Code Online (Sandbox Code Playgroud)

但是,很多std :: set接口对std :: unique_ptrs都没用,因为查找函数需要std :: unique_ptr参数(我显然没有这些参数,因为它们由集合本身拥有).

我可以想到两个主要的解决方案.

  1. 创建临时unique_ptr以进行查找.例如,上面的removeObject()可以实现如下:

    void MyClass::removeObject(const Object* target)
    {
      std::unique_ptr<Object> targetSmartPtr(target);
      objects.erase(targetSmartPtr);
      targetSmartPtr.release();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将原始指针映射替换为unique_ptrs.

      // ...
      std::map<const Object*, std::unique_ptr<Object>> objects;
    };
    
    Run Code Online (Sandbox Code Playgroud)

然而,对我来说,两者似乎都有点愚蠢.在解决方案1中,erase()不是noexcept,因此临时unique_ptr可能会删除它实际上不拥有的对象,而2需要不必要地为容器存储两倍.

我知道Boost的指针容器,但与现代C++ 11标准库容器相比,它们目前的功能有限.

我最近在阅读有关C++ 14的内容,并且遇到了"将异构比较查找添加到关联容器".但是形成我对它的理解,查找类型必须与键类型相当,但原始指针不能与unique_ptrs相比.

任何人都知道更优雅的解决方案或即将添加的C++解决了这个问题?

c++ unique-ptr c++11 c++14

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

PHP语法高亮

我正在寻找可以自定义的PHP语法高亮引擎(即我可以为新语言提供自己的标记器)并且可以同时处理多种语言(即在同一输出页面上).这个引擎必须与CSS类一起很好地工作,即它应该通过插入<span>class属性装饰的元素来格式化输出.可扩展模式的奖励点.

搜索客户端语法高亮脚本(JavaScript).

到目前为止,我一直坚持使用GeSHi.不幸的是,由于几个原因,GeSHi失败了.主要原因是不同的语言文件定义了完全不同的,不一致的样式.我已经花了好几个小时试图将不同的语言定义重构为一个共同点,但由于大多数定义文件本身都非常糟糕,我最终还是希望切换.

理想情况下,我想要一个类似于CodeRay,Pygments或JavaScript dp.SyntaxHighlighter的API.

澄清:

我在找编写的代码高亮软件 PHP中,没有 PHP(因为我需要用它从内PHP).

php syntax-highlighting

38
推荐指数
3
解决办法
3万
查看次数

Python:@staticmethod和@property

我想要

Stats.singleton.twitter_count += 1
Run Code Online (Sandbox Code Playgroud)

而我以为我能做到

class Stats:
    singleton_object = None

    @property
    @staticmethod
    def singleton():
        if Stats.singleton_object:
            return Stats.singleton_object
        Stats.singleton_object = Stats()
        return Stats.singleton()
Run Code Online (Sandbox Code Playgroud)

但它引发了一个例外:

>>> Stats.singleton.a = "b"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'property' object has only read-only attributes (assign to .a)
Run Code Online (Sandbox Code Playgroud)

python singleton properties

38
推荐指数
2
解决办法
3万
查看次数

在Python中使用变量用于类名?

我想知道如何在Python中使用对象和函数名称的变量.在PHP中,您可以这样做:

$className = "MyClass";

$newObject = new $className();
Run Code Online (Sandbox Code Playgroud)

你是如何用Python做这种事的?或者,我完全不理解与Python的一些根本区别,如果是这样,它是什么?

python dynamic-typing

36
推荐指数
4
解决办法
4万
查看次数

列出删除列表中的最后一个元素以及所有元素的方法

我有清理lists 的问题.在当前的程序中,我有一个方法可以清除一定数量的lists.这是相当不方便的,因为在使用此方法的程序的一部分期间,如果它仅删除列表中的最后一个元素将会更有帮助.有没有什么方法可以将索引号设置为我的方法的参数来解决这个问题?

方法的代码

def clearLists(self):
    del self.Ans[:]
    del self.masses[:]
Run Code Online (Sandbox Code Playgroud)

每当我想使用这个方法时,我只会写self.ClearLists()并删除列表中的每个元素.

python methods list

36
推荐指数
3
解决办法
14万
查看次数

CSS:填充父容器的文本框

我试图让一个<input type="text">(以下简称为"文本框")通过设置其填充父容器width100%.这有效,直到我给文本框填充.然后将其添加到内容宽度并且输入字段溢出.请注意,在Firefox中,这仅在将内容呈现为符合标准时才会发生.在怪癖模式下,另一个盒子模型似乎适用.

这是在所有现代浏览器中重现行为的最小代码.

#x {
  background: salmon;
  padding: 1em;
}

#y, input {
  background: red;
  padding: 0 20px;
  width: 100%;
}
Run Code Online (Sandbox Code Playgroud)
<div id="x">
  <div id="y">x</div>
  <input type="text"/>
</div>
Run Code Online (Sandbox Code Playgroud)

我的问题:如何让文本框适合容器?

注意:对于<div id="y">,这很简单:只需设置即可width: auto.但是,如果我尝试为文本框执行此操作,效果会有所不同,文本框将其默认行计数作为宽度(即使我display: block为文本框设置).

/编辑:大卫的"解决方案"当然会奏效.但是,我不想修改HTML - 我特别不想添加没有语义功能的虚拟元素.这是一个典型的divitis病例,我想不惜一切代价避免.这只能是最后的黑客攻击.

css

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

数字类型的类模板

我怎样写只接受数字类型类模板(int,double,float等)作为模板?

c++ templates

30
推荐指数
2
解决办法
2万
查看次数