我想写一个行为类似的自定义类dict- 所以,我继承自dict.
但我的问题是:我是否需要dict在我的__init__()方法中创建一个私有成员?我没有看到这一点,因为我已经有了dict行为,如果我只是继承dict.
任何人都可以指出为什么大多数继承片段看起来像下面的那样?
class CustomDictOne(dict):
def __init__(self):
self._mydict = {}
# other methods follow
Run Code Online (Sandbox Code Playgroud)
而不是更简单......
class CustomDictTwo(dict):
def __init__(self):
# initialize my other stuff here ...
# other methods follow
Run Code Online (Sandbox Code Playgroud)
实际上,我认为我怀疑这个问题的答案是用户不能直接访问你的字典(即他们必须使用你提供的访问方法).
但是,阵列访问运算符[]呢?如何实现这一点?到目前为止,我还没有看到一个显示如何覆盖[]运算符的示例.
因此,如果[]自定义类中未提供访问函数,则继承的基本方法将在不同的字典上运行?
我尝试了以下代码片段来测试我对Python继承的理解:
class myDict(dict):
def __init__(self):
self._dict = {}
def add(self, id, val):
self._dict[id] = val
md = myDict()
md.add('id', 123)
print md[id]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
KeyError:<内置函数id>
上面的代码有什么问题?
如何更正类,myDict以便我可以编写这样的代码? …
Google已将谷歌Chrome中使用的自动更新机制开源为奥马哈.
对于任何不是谷歌的人来说,配置似乎相当复杂和困难.在项目中使用奥马哈的经验是什么?可以推荐吗?
就像它在标题中所说:什么The last statement in a 'do' construct must be an expression意思?我结束了我的do块,putStrLn就像我在几个例子中看到的那样,我得到了一个错误.
码:
main = do args <- getArgs
file <-readFile "TWL06.txt"
putStrLn results
Run Code Online (Sandbox Code Playgroud) 无论好坏,Haskell流行的Servant库使得在monad变换器堆栈中运行代码变得很普遍ExceptT err IO.仆人自己的处理程序monad是ExceptT ServantErr IO.正如许多人所说,这是一个有点麻烦的monad工作,因为有多种方法可以展开失败:1)通过IO基地的正常例外,或2)返回Left.
正如Ed Kmett的exceptions图书馆有助于澄清:
基于连续的monad和诸如
ErrorT e IO提供多种故障模式的堆栈是this [MonadMask]类的无效实例.
这非常不方便,因为MonadMask我们可以访问有用的[多态版本] bracket函数来进行资源管理(不会因异常而泄漏资源等).但是在Servant的Handlermonad我们不能使用它.
我对它不是很熟悉,但是有些人说解决方案是使用monad-control它和许多合作伙伴库一样,lifted-base并且lifted-async让你的monad访问资源管理工具bracket(大概这适用于ExceptT err IO和朋友一样?).
然而,似乎monad-control是失去了在社会上赞成,但我不能告诉替代将是什么.即使Snoyman最近的safe-exceptions图书馆使用Kmett的exceptions库也避免了monad-control.
有人可以为像我这样试图为严重的Haskell使用方式的人们澄清当前的故事吗?
resources haskell exception-handling monad-transformers io-monad
我知道可以截断一个文件
std::fstream fs(mypath, std::fstream::out | std::fstream::trunc);
Run Code Online (Sandbox Code Playgroud)
但我需要读取文件,截断它,然后用相同的文件句柄写所有内容(所以整个操作是原子的).任何人?
当导出要从C调用的Haskell函数时,何时收集Haskell的垃圾?如果C拥有main,则无法预测下一次调用Haskell.在运行单线程Haskell或没有并行GC时,这个问题尤为重要.
假设你有一个带有两个伪目标的Makefile,'all'和'debug'.'debug'目标用于构建与'all'相同的项目,除了一些不同的编译开关(例如-ggdb).由于目标使用不同的编译开关,如果在两者之间切换,显然需要重建整个项目.但GNUmake自然不会认识到这一点.
所以,如果你输入,make all你会得到
Building ...
...
Run Code Online (Sandbox Code Playgroud)
如果你打字make debug,你就得到了
make: Nothing to be done for `debug'.
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:你如何在Makefile中实现一个干净的解决方案,注意到最后一个构建使用了不同的伪目标或不同的编译开关,而不是你想要的那个?如果它们不同,Makefile将重建所有内容.
我有一个相对简单的"复制"程序,它只是将一个文件的所有行复制到另一个文件.我玩弄Haskell的并发支持TMQueue和STM所以我想我会尝试这样的:
{-# LANGUAGE BangPatterns #-}
module Main where
import Control.Applicative
import Control.Concurrent.Async -- from async
import Control.Concurrent.Chan
import Control.Concurrent.STM (atomically)
import Control.Concurrent.STM.TMQueue -- from stm-chans
import Control.Monad (replicateM, forM_, forever, unless)
import qualified Data.ByteString.Char8 as B
import Data.Function (fix)
import Data.Maybe (catMaybes, maybe)
import System.IO (withFile, IOMode(..), hPutStrLn, hGetLine)
import System.IO.Error (catchIOError)
input = "data.dat"
output = "out.dat"
batch = 100 :: Int
consumer :: TMQueue B.ByteString -> IO ()
consumer q = withFile output WriteMode …Run Code Online (Sandbox Code Playgroud)