小编Tor*_*örn的帖子

如何设置方法测试中使用的私有实例变量?

给定一个带有几个实例变量和一些方法的类.一些实例变量可通过attr_reader和设置访问attr_accessor.因此其他人是私人的.
某些私有实例变量在其中一个实例方法中设置,并在另一个方法中读取/使用.

为了测试我正在使用RSpec.由于我还是Ruby的新手,并且想要把所有事情都搞定,我将我的测试定义得相当精细.因此,我describe为每个实例方法都有一个块,它们本身被划分为contexts和its 的子集.一般环境先决条件定义为before.

但是,当测试其中一个方法,即使用但未设置其中一个私有变量时,我需要调用另一个方法,即设置此变量.这似乎相当超重,对我来说不是模块化的.

有没有办法强制私有实例变量到某个值.类似于" 剥离 "私有实例变量的值Object::instance_eval(:var).

ruby testing rspec access-specifier

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

一旦定义,可以将其他源文件添加到可执行文件中吗?

鉴于我已经在文件中定义了一个主要源文件的可执行CMakeList.txt文件:

ADD_EXECUTABLE(MyExampleApp main.cpp)
Run Code Online (Sandbox Code Playgroud)

我可以在此行之后将更多源文件添加到此可执行文件中但是在相同或包含的CMakeList.txt文件中吗?

cmake

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

类型化中间语言的语用学

编译的一个趋势是使用类型化的中间语言.Haskell的ghc与它的core中间语言,系统F-ω变体,是本体系结构[1]的一个例子.另一个是LLVM,它的核心是一种类型化的中间语言[2].这种方法的好处是可以及早检测构成代码生成器部分的转换中的错误.此外,可以在优化和代码生成期间使用类型信息.

为了提高效率,对类型化的IR进行类型检查,而不是推断它们的类型.为了快速进行类型检查,每个变量和每个活页夹都带有类型以便于类型检查.

但是,编译器管道中的许多转换可能会引入新变量.例如,规范化转换K(.)可能会转换应用程序

M(N)
Run Code Online (Sandbox Code Playgroud)

变成一个表达式

let x = K(M) in
let y = K(N) in x(y)
Run Code Online (Sandbox Code Playgroud)

题.我想知道编译器如何处理给新引入的变量赋予类型的问题.难道他们重新类型检测,在上面的例子中K(M)K(N)?这不是很费时间吗?它需要通过环境吗?他们是否使用AST节点中的映射来键入信息以避免重新运行类型检查?


  1. S. Marlow,S.Peyton Jones,格拉斯哥Haskell编译器.

  2. LLVM语言参考手册.

compiler-construction ghc intermediate-language compiler-optimization llvm-ir

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

如何在子路径中配置nyx后面的IPython?

我有nginx的运行处理所有的SSL东西,并已进行代理/到一个管理平台实例和/ci一个詹金斯实例.

现在我想通过同样的nginx提供一个IPython实例./ipython

nginx.conf我添加:

http {
    ...
    upstream ipython_server {
        server 127.0.0.1:5001;
    }

    server {
        listen 443 ssl default_server;
        ... # all SSL related stuff and the other proxy configs (Redmine+Jenkins)

        location /ipython {
            proxy_pass http://ipython_server;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我,.ipython/profile_nbserver/ipython_notebook_config.py我有:

c.NotebookApp.base_project_url = '/ipython/'
c.NotebookApp.base_kernel_url = '/ipython/'
c.NotebookApp.port = 5001
c.NotebookApp.trust_xheaders = True
c.NotebookApp.webapp_settings = {'static_url_prefix': '/ipython/static/'}
Run Code Online (Sandbox Code Playgroud)

指向我的浏览器,https://myserver/ipython为我提供了我启动IPython目录中所有笔记本的常用索引页面.
但是,当我尝试打开其中一个现有笔记本或创建一个新笔记本时,我收到错误: …

proxy nginx ipython websocket

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

如何在PyCharm中签署("签约")Git提交?

我想知道如何在PyCharm的Commit对话框中自动在Git提交中添加"signed-off-by"行.

有修改前一次提交和更改提交作者的选项,但我找不到基于git commit -s每次提交添加签名行()的选项.

它甚至可能还是缺少功能?

pycharm git-commit

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

如何模拟Ruby模块功能?

如何在项目中模拟自编写模块的模块功能?

鉴于模块和功能

module ModuleA::ModuleB
  def self.my_function( arg )
  end
end
Run Code Online (Sandbox Code Playgroud)

这就是所谓的

ModuleA::ModuleB::my_function( with_args )
Run Code Online (Sandbox Code Playgroud)

当我在编写规范的函数中使用它时,我应该如何模拟它?


加倍它(obj = double("ModuleA::ModuleB"))对我来说没有意义,因为函数是在模块上调用而不是在对象上调用.

我试过抄袭它(ModuleA::ModuleB.stub(:my_function).with(arg).and_return(something)).显然,它没有用.stub那里没有定义.

然后我试了一下should_receive.再次NoMethodError.

模拟模块及其功能的首选方法是什么?

ruby rspec module mocking

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

如何告诉Boost.Test在第一次失败的测试用例时停止?

我在几个测试套件中订购了许多Boost测试用例.一些测试用例有一个,一些不止一个检查.

但是,在执行所有测试时,它们都会被执行 - 无论有多少失败或通过.我知道,我可以通过使用BOOST_REQUIRE而不是使用几个检查来停止执行一个测试用例BOOST_CHECK.但那不是我想要的.

在第一个测试用例失败后,如何告诉Boost停止整个执行?我更喜欢在运行时解决方案(即运行时参数)上编译的解决方案(例如,使用全局夹具实现).

c++ boost unit-testing boost-test

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

如何在初始化父类时返回子类的新实例?

给定一个类层次结构如下:

class A
  def initialize(param)
    if param == 1 then
      #initialize and return instance of B
    else
      #initialize and return instance of C
    end
  end
end

class B < A
end

class C < A
end
Run Code Online (Sandbox Code Playgroud)

是否可以实际初始化并返回初始化BC初始化的实例A?即my_obj = A.new(param)会导致my_obj作为类的实例BC依赖于价值param,这被签入A.initialize(param).

在我的用例中,它在运行时只知道使用哪个子类(BC)和父类(A)基本上从未真正使用过.我想这可能是移动决定是否逻辑一个好主意,B或者C到他们的共同祖先.

如果这是不可能的(或不好的风格),我应该在哪里检查param和决定初始化哪个类?

ruby oop inheritance class

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

对抽象接口的所有权转移的指针向量的const-correct访问器

我正在设计一个从头开始的库,并希望尽可能地获得公共API .我希望编译器因误用而对我大喊大叫.因此,我对自己施加了以下规则:

  1. 整个库中的true(即深度和完整)const正确性

    声明不会发生变化的所有事物(局部变量,成员变量,成员函数)const.该constness应该传播到所有嵌套的成员和类型.

  2. 明确和富有表现力的所有权

    根据C++核心指南,我将其定义为(iff在数学意义上的if和only if):

    1. 函数参数是unique_ptr<T>T&& iff函数正在消耗它(即取得所有权)
    2. 函数参数是shared_ptr<const T>T const& iff函数只读它
    3. 函数参数是shared_ptr<T>或者T& 如果函数正在修改它而不取得所有权
    4. 返回值是unique_ptr<T>T iff函数将所有权转移给调用者
    5. 返回值是shared_ptr<const T>T const& iff调用者只应读取它(虽然调用者可以构造它的副本 - 给定T是可复制的)
    6. 没有功能应该返回shared_ptr<T>,T&T*(因为它会允许无法控制的副作用,我试图通过设计避免)
  3. 隐藏的实施细节

    现在,我将使用抽象接口与工厂将实现作为一个返回unique_ptr<Interface>.虽然,我愿意接受解决我下面描述的问题的替代模式.

我不关心虚拟表查找,并希望通过各种方式避免动态转换(我将它们视为代码气味).


现在,给出了两个班AB,其中B拥有可变数量的A秒.我们也有 - B实现BImpl …

c++ api-design c++14 c++17

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

在单元格上方呈现的表格单元格中的旋转文本不在内

我有以下模板来生成一个定义的表:

<xsl:template name="CreateTable">
    <fo:block>
        <fo:table border-style="solid" table-layout="fixed">
            <fo:table-body>
                <fo:table-row>
                    <xsl:for-each select="Table/Head/Cell">
                        <fo:table-cell border-style="solid">
                            <fo:block><xsl:value-of select="." /></fo:block>
                        </fo:table-cell>
                    </xsl:for-each>
                </fo:table-row>
                <xsl:for-each select="Table/Row">
                    <fo:table-row>
                        <xsl:for-each select="Cell">
                            <fo:table-cell  border-style="solid">
                                <fo:block><xsl:value-of select="."/></fo:block>
                            </fo:table-cell>
                        </xsl:for-each>
                    </fo:table-row>
                </xsl:for-each>
            </fo:table-body>
        </fo:table>
    </fo:block>
    <fo:block margin-top="10pt"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

现在我想将第一行中的文本旋转90度,以便从下往上阅读.

我想出的最佳解决方案是:

  • 设置reference-orientation="0"<fo:table>:

    <fo:table border-style="solid" table-layout="fixed" reference-orientation="0">
    
    Run Code Online (Sandbox Code Playgroud)
  • 包围<fo:block>...</fo:block><fo:table-cell>具有<fo:block-container>被旋转90度:

    <fo:table-cell border-style="solid">
        <fo:block-container reference-orientation="90">
            <fo:block><xsl:value-of select="." /></fo:block>
        </fo:block-container>
    </fo:table-cell>
    
    Run Code Online (Sandbox Code Playgroud)

文本是旋转的,但第一行的高度实际为0,文本显示在表格上方,覆盖了前一个文本:

旋转文本覆盖以前的文本

为第一行的单元格定义特定高度时,文本仍在表格之前,而不在第一行内:

旋转文本覆盖前一个文本并清空第一行

如何在第一行的单元格中定位文本,并根据行中最长的文本自动计算行的高度?

xsl-fo apache-fop

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