我正在使用ARC.ARC会自动释放所有属性dealloc吗?是否有必要手动设置所有公共属性和私有字段nil?有什么好的模式可以遵循吗?
如何在 Haskell 中表示二维数组整数,以便我可以在 O(1) 或 O(logN) 中使用 (i, j) 访问任何元素?
用 Data.Array 和 Data.Vector 定义有什么区别?哪个更实用
data Matrix = Vector (Vector Int)
Run Code Online (Sandbox Code Playgroud)
如果我如上定义,如何制作一个转置这个矩阵的函数?
例如:转置 a[[1,2,3],[4,5,6],[7,8,9]]将返回[[1,4,7],[2,5,8],[3,6,9]]
我使用以下代码在对象上添加KVO.
[self.model addObserver:self
forKeyPath:@"userName"
options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
context:nil];
Run Code Online (Sandbox Code Playgroud)
现在我想设置userName,如下所示.是的,它会触发KVO.
self.model.userName = @"testUser";
Run Code Online (Sandbox Code Playgroud)
但是,我想在没有触发器KVO的情况下设置值.怎么做?有没有像下面这样的方法允许我这样做?
[self.model setValue:@"testUser" forKey:@"userName" isSilent:YES];
Run Code Online (Sandbox Code Playgroud) 定义惰性字段时,在打印之前没有异常.
> data T = T Int deriving (Show)
> let t = T undefined
> t
T *** Exception: Prelude.undefined
CallStack (from HasCallStack):
error, called at libraries/base/GHC/Err.hs:79:14 in base:GHC.Err
undefined, called at <interactive>:3:7 in interactive:Ghci3
Run Code Online (Sandbox Code Playgroud)
使用严格的field(!Int),我认为undefined会立即进行评估,这将导致异常,但实际上,在打印之前它仍然没有评估.这是为什么?
> data X = X !Int deriving (Show)
> let x = X undefined
> x
*** Exception: Prelude.undefined
CallStack (from HasCallStack):
error, called at libraries/base/GHC/Err.hs:79:14 in base:GHC.Err
undefined, called at <interactive>:6:11 in interactive:Ghci5
Run Code Online (Sandbox Code Playgroud) 在Haskell QuickCheck中,如何生成一个字符串,使其只包含字符'S'和'C','S'和'C'的位置是随机的?
例如,"SCCS","SSSS","CCCC","CSSCCS",""
我的用例是:我有两个功能countCAndS :: String -> (Int, Int),countCAndS' :: String -> (Int, Int).它们具有相同的类型签名.我想编写一个quickcheck属性,以便我可以将相同的字符串传递给这两个不同的函数,并检查输出是否相同.
我在app文件夹中有两个文件
app/
|-- Main.hs
|-- SomeFunc2.hs
Run Code Online (Sandbox Code Playgroud)
该SomeFunc2.hs仅仅是打印不同的字符串
module SomeFunc2 where
import Lib
main :: IO ()
main = putStrLn "someFunc2"
Run Code Online (Sandbox Code Playgroud)
当我package.yaml像这样定义多个可执行文件时
executables:
multiexes-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- multiexes
somefunc2-exe:
main: SomeFunc2.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- multiexes
Run Code Online (Sandbox Code Playgroud)
我有错误:
? stack build
Building all executables for `multiexes' once. After a successful build of all of them, only specified executables will …Run Code Online (Sandbox Code Playgroud) 我有这样的模块
module A where
import qualified Data.Maybe as Maybe
fromMaybe = Maybe.fromMaybe
Run Code Online (Sandbox Code Playgroud)
是否可以从中重新导出一些功能Data.Maybe?我不想重新导出整个Data.Maybe模块,只是一些功能,比如fromMaybe.
我使用以下场景作为示例来学习如何以简单的方式处理错误.该场景基本上是从环境变量读取文件路径,然后使用文件路径读取和打印文件.
下面的代码有效,但我不喜欢printFile它,因为它有嵌套case of,有点难读.我想知道是否有一种干净的方法来摆脱它并保持printFile功能平坦而不使用lookupEnv?
您将如何简化此错误处理流程?
module Main where
import Control.Exception (IOException, handle, throw)
import System.Environment (getEnv)
import System.IO.Error (isDoesNotExistError)
data MissingError
= MissingEnv String
| MissingFile String
deriving (Show)
main :: IO ()
main = do
eitherFile <- printFile
either print print eitherFile
getEnv' :: String -> MissingError -> IO (Either MissingError String)
getEnv' env err = handle (missingEnv err) $ Right <$> (getEnv env)
readFile' :: FilePath -> MissingError -> IO (Either …Run Code Online (Sandbox Code Playgroud) 我有一个Exception type UnknownException,我想在抛出它时包括CallStack。
module Main where
import Control.Exception (Exception, throw)
newtype UnknownException = UnknownException
{ caller :: String
} deriving (Show)
instance Exception UnknownException
main :: IO ()
main = willThrow
willThrow :: IO ()
willThrow = throw $ UnknownException "willThrow"
Run Code Online (Sandbox Code Playgroud)
我想要上面的示例打印这样的日志
example-exe: UnknownException {caller = "willThrow"}
CallStack (from HasCallStack):
willThrow, called at app/Main.hs:16:13 in main:Main
main, called at app/Main.hs:13:8 in main:Main
Run Code Online (Sandbox Code Playgroud)
但实际上打印:
example-exe: UnknownException {caller = "willThrow"}
Run Code Online (Sandbox Code Playgroud)
另外,在Haskell的异常中包括CallStack是一个好习惯吗?
我删除了 package.yml 文件以使用 .cabal 文件。现在我想尝试在 package.yml 中定义所有内容,并让 stack 自动生成 .cabal 文件。
但是当我手动将 .cabal 文件转换为 package.yml 并删除 .cabal 文件并运行时stack build,它显示了这个错误:
Stack looks for packages in the directories configured in the 'packages' variable defined in your stack.yaml
The current entry points to /Users/leo/zhangchiqing/hello/ but no .cabal file could be found there.
Run Code Online (Sandbox Code Playgroud)
如何从 package.yml 生成 .cabal 文件?