给定一个带有几个实例变量和一些方法的类.一些实例变量可通过attr_reader
和设置访问attr_accessor
.因此其他人是私人的.
某些私有实例变量在其中一个实例方法中设置,并在另一个方法中读取/使用.
为了测试我正在使用RSpec.由于我还是Ruby的新手,并且想要把所有事情都搞定,我将我的测试定义得相当精细.因此,我describe
为每个实例方法都有一个块,它们本身被划分为context
s和it
s 的子集.一般环境先决条件定义为before
.
但是,当测试其中一个方法,即使用但未设置其中一个私有变量时,我需要调用另一个方法,即设置此变量.这似乎相当超重,对我来说不是模块化的.
有没有办法强制私有实例变量到某个值.类似于" 剥离 "私有实例变量的值Object::instance_eval(:var)
.
鉴于我已经在文件中定义了一个主要源文件的可执行CMakeList.txt
文件:
ADD_EXECUTABLE(MyExampleApp main.cpp)
Run Code Online (Sandbox Code Playgroud)
我可以在此行之后将更多源文件添加到此可执行文件中但是在相同或包含的CMakeList.txt
文件中吗?
编译的一个趋势是使用类型化的中间语言.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节点中的映射来键入信息以避免重新运行类型检查?
S. Marlow,S.Peyton Jones,格拉斯哥Haskell编译器.
compiler-construction ghc intermediate-language compiler-optimization llvm-ir
我有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目录中所有笔记本的常用索引页面.
但是,当我尝试打开其中一个现有笔记本或创建一个新笔记本时,我收到错误: …
我想知道如何在PyCharm的Commit对话框中自动在Git提交中添加"signed-off-by"行.
有修改前一次提交和更改提交作者的选项,但我找不到基于git commit -s
每次提交添加签名行()的选项.
它甚至可能还是缺少功能?
如何在项目中模拟自编写模块的模块功能?
鉴于模块和功能
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
.
模拟模块及其功能的首选方法是什么?
我在几个测试套件中订购了许多Boost测试用例.一些测试用例有一个,一些不止一个检查.
但是,在执行所有测试时,它们都会被执行 - 无论有多少失败或通过.我知道,我可以通过使用BOOST_REQUIRE
而不是使用几个检查来停止执行一个测试用例BOOST_CHECK
.但那不是我想要的.
在第一个测试用例失败后,如何告诉Boost停止整个执行?我更喜欢在运行时解决方案(即运行时参数)上编译的解决方案(例如,使用全局夹具实现).
给定一个类层次结构如下:
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)
是否可以实际初始化并返回初始化B
或C
初始化的实例A
?即my_obj = A.new(param)
会导致my_obj
作为类的实例B
或C
依赖于价值param
,这被签入A.initialize(param)
.
在我的用例中,它在运行时只知道使用哪个子类(B
或C
)和父类(A
)基本上从未真正使用过.我想这可能是移动决定是否逻辑一个好主意,B
或者C
到他们的共同祖先.
如果这是不可能的(或不好的风格),我应该在哪里检查param
和决定初始化哪个类?
我正在设计一个从头开始的库,并希望尽可能好地获得公共API .我希望编译器因误用而对我大喊大叫.因此,我对自己施加了以下规则:
整个库中的true(即深度和完整)const正确性
声明不会发生变化的所有事物(局部变量,成员变量,成员函数)const
.该constness应该传播到所有嵌套的成员和类型.
明确和富有表现力的所有权
根据C++核心指南,我将其定义为(iff在数学意义上的if和only if):
unique_ptr<T>
或T&&
iff函数正在消耗它(即取得所有权)shared_ptr<const T>
或T const&
iff函数只读它shared_ptr<T>
或者T&
如果函数正在修改它而不取得所有权unique_ptr<T>
或T
iff函数将所有权转移给调用者shared_ptr<const T>
或T const&
iff调用者只应读取它(虽然调用者可以构造它的副本 - 给定T
是可复制的)shared_ptr<T>
,T&
或T*
(因为它会允许无法控制的副作用,我试图通过设计避免)隐藏的实施细节
现在,我将使用抽象接口与工厂将实现作为一个返回unique_ptr<Interface>
.虽然,我愿意接受解决我下面描述的问题的替代模式.
我不关心虚拟表查找,并希望通过各种方式避免动态转换(我将它们视为代码气味).
现在,给出了两个班A
和B
,其中B
拥有可变数量的A
秒.我们也有 - B
实现BImpl …
我有以下模板来生成一个定义的表:
<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,文本显示在表格上方,覆盖了前一个文本:
为第一行的单元格定义特定高度时,文本仍在表格之前,而不在第一行内:
如何在第一行的单元格中定位文本,并根据行中最长的文本自动计算行的高度?
ruby ×3
c++ ×2
rspec ×2
apache-fop ×1
api-design ×1
boost ×1
boost-test ×1
c++14 ×1
c++17 ×1
class ×1
cmake ×1
ghc ×1
git-commit ×1
inheritance ×1
ipython ×1
llvm-ir ×1
mocking ×1
module ×1
nginx ×1
oop ×1
proxy ×1
pycharm ×1
testing ×1
unit-testing ×1
websocket ×1
xsl-fo ×1