我遇到了我的代码中的一个错误,这让我觉得我并不真正理解有关F#和懒惰评估的一些细节.我知道F#急切地评估,因此我对以下函数感到有些困惑:
// Open a file, then read from it. Close the file. return the data.
let getStringFromFile =
File.OpenRead("c:\\eo\\raw.txt")
|> fun s -> let r = new StreamReader(s)
let data = r.ReadToEnd
r.Close()
s.Close()
data
Run Code Online (Sandbox Code Playgroud)
当我在FSI中称呼它时:
> let d = getStringFromFile();;
System.ObjectDisposedException: Cannot read from a closed TextReader.
at System.IO.__Error.ReaderClosed()
at System.IO.StreamReader.ReadToEnd()
at <StartupCode$FSI_0134>.$FSI_0134.main@()
Stopped due to error
Run Code Online (Sandbox Code Playgroud)
这让我觉得这getStringFromFile是懒惰的评价 - 所以我完全糊涂了.我没有得到关于F#如何评估函数的信息.
我一直在尝试让scons将exe,obj,lib和dll文件输出到特定的构建目录.
我的文件结构如下所示:
/projectdir
/build
/bin
/obj
/source
/subdirs
/..
SConstruct
Run Code Online (Sandbox Code Playgroud)
基本上,我现在得到的是我的源目录被obj文件污染了.我宁愿把它放在一个地方.
SConstruct文件如下所示:
env.VariantDir('build', 'source', duplicate = 0)
env.Program('Hierarchy', source = ['source/sconstest.cpp', 'source/utils/IntUtil.cpp'])
Run Code Online (Sandbox Code Playgroud) 我的代码有一个关于不定义的错误operator<.我operator<通过重载它来纠正我的代码中的问题.当我编译它时,没有错误,但它有很多关于多重定义的错误.我的代码是:
int Vector3D::operator < (const Vector 3D &vector) const
{
if(x<vector.x)
return 1;
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下是一些行:
debug/src/common/propagation-delay-model_1.o: In function `empty':
/usr/include/c++/4.1.2/limits:1044: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const'
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here
debug/src/common/propagation-loss-model_1.o: In function `empty':
/usr/include/c++/4.1.2/new:94: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const'
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here
debug/src/common/jakes-propagation-loss-model_1.o: In function `empty':
/usr/include/c++/4.1.2/new:94: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const'
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first defined here
debug/src/common/cost231-propagation-loss-model_1.o: In function `empty':
/usr/include/c++/4.1.2/limits:1044: multiple definition of `ns3::Vector3D::operator<(ns3::Vector3D const&) const'
debug/src/core/vector_1.o:/home/bahar/Desktop/ns/ns-allinone-3.9/ns-allinone-3.9/ns-3.9/build/../src/core/vector.h:118: first …Run Code Online (Sandbox Code Playgroud) 我知道有Comet服务器技术可以做到这一点,但我想写一些简单和本土的东西.
当一条记录插入到MySQL表中时,我希望它以某种方式将这些数据传递给一系列使用PHP(或其他)的长轮询Apache连接.因此,多个人通过他们的浏览器"监听",第二个发生MySQL INSERT,它被发送到他们的浏览器并执行.
简单的方法是让PHP脚本轮询MySQL数据库,但这并不是真的从服务器推送并引入了一些不必要的数据库查询令人无法接受的顺序.我希望从MySQL获取数据到长轮询连接,基本上没有监听器查询.
有关如何实现这一点的任何想法?
Scala有一个类似于Haskell的$运算符吗?
-- | Application operator. This operator is redundant, since ordinary
-- application @(f x)@ means the same as @(f '$' x)@. However, '$' has
-- low, right-associative binding precedence, so it sometimes allows
-- parentheses to be omitted; for example:
--
-- > f $ g $ h x = f (g (h x))
--
-- It is also useful in higher-order situations, such as @'map' ('$' 0) xs@,
-- or @'Data.List.zipWith' ('$') fs xs@.
{-# …Run Code Online (Sandbox Code Playgroud) 在处理了几个大型Web应用程序,并看到没有清晰结构的巨大样式表之后,我真的很想知道人们是否已经找到了保持css清理大型复杂Web应用程序的方法.
你如何从遗留的,混乱的CSS转移到清理,漂亮的级联,DRY样式表?
我目前正在开发的应用程序有12000行css.它早在没有标准或评论css的情况下就有机地增长到这个尺寸,唯一的规则就是让应用程序与设计相匹配.我们经常遇到的一些问题:
冲突的样式:一个开发人员添加.header {font-weight:bold;}但是.header已经在其他模块中使用,并且不应该是那些粗体.
级联问题:Foo小部件有一个.header但它还包含一个带有.header类的Bar小部件列表.
继承问题,我们不断将小部件字体重新定义为11px/normal,因为一些顶级容器使用12px/18 px行高.
使用诸如dojo/dijit或jquery ui之类的库来对抗小部件库,这些库可以添加大量样式以实现功能,这意味着我们的代码充斥着我们必须覆盖库样式以使事物看起来恰到好处的地方.有大约2000行css只是为了调整内置dijit样式
我们正在考虑实施以下规则:
命名空间所有新的窗口小部件类 - 如果你有一个窗口小部件foo,所有的子类名将是.foo_,所以我们得到:.foo,.foo_header,.foo_content,.foo_footer.这使得我们的CSS基本上是FLAT,但我们看不到其他方法来组织我们的代码,而不会遇到上面提到的遗留样式或级联问题.
警察通用样式 - 有一小部分通用类,只适用于非常特殊的情况.例如.editable - 适用于应该调用编辑器的句子部分 - 应该只包含文本节点.
利用css编译器mixins要避免在不同的小部件中重复定义相同的样式,请定义并使用mixins.虽然我们担心mixins也会失控.
我们还能如何摆脱不断将回归引入可持续发展的css混乱.
以下使用seg-V崩溃:
// my code
int* ipt;
int bool set = false;
void Set(int* i) {
ASSERT(i);
ipt = i;
set = true;
}
int Get() {
return set ? *ipt : 0;
}
// code that I don't control.
struct S { int I, int J; }
int main() {
S* ip = NULL;
// code that, as a bug, forgets to set ip...
Set(&ip->J);
// gobs of code
return Get();
}
Run Code Online (Sandbox Code Playgroud)
这是因为虽然i它不是NULL仍然无效.如果调用代码从NULL指针获取数组索引操作的地址,则会发生同样的问题.
对此的一个解决方案是修剪低阶位: …
我有以下记录:
(defrecord Signal [samples ^double sample-rate ^double scaling-factor])
Run Code Online (Sandbox Code Playgroud)
如何指定samples为双数组?
我正在使用clojure 1.2.0
编辑:
@dreish当我(show Signal)从levand更改后调用时,我得到以下输出:
[35] <init> (Object,double,double)
[36] <init> (Object,double,double,Object,Object)
[37] __extmap : Object
[38] __meta : Object
[39] sample_rate : double
[40] samples : Object
[41] scaling_factor : double
Run Code Online (Sandbox Code Playgroud)
我知道暗示非原始类型只是用来避免反射.来自http://clojure.org/datatypes
谢谢大家!
我知道在JavaScript中你可以向现有类型添加新属性(比如Date),但是可以在定义匿名类型后添加新属性吗?
例如,假设我有以下脚本:
var employee = {
'Name': 'Scott',
'Age': 32,
'JavaScriptNewbie': true
};
Run Code Online (Sandbox Code Playgroud)
稍后在我的脚本中,我想为这个雇员对象添加一个新属性(比如Salary).那可能吗?
TIA!
我使用以下逻辑来根据条件更新列表项.
def update_orders_list(order)
@orders.delete_if{|o| o.id == order.id}
@orders << order
end
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会更喜欢这些方法:
array.find_and_replace(obj) { |o| conditon }
Run Code Online (Sandbox Code Playgroud)
要么
idx = array.find_index_of { |o| condition }
array[idx] = obj
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
c++ ×2
apache ×1
clojure ×1
comet ×1
css ×1
eager ×1
evaluation ×1
f# ×1
function ×1
javascript ×1
legacy ×1
long-polling ×1
low-level ×1
mysql ×1
operators ×1
php ×1
refactoring ×1
ruby ×1
scala ×1
scons ×1
type-hinting ×1