小编Sea*_*ess的帖子

动态代理类的自定义foreach结果 - 魔术方法?

我需要序列化一个代理类.该类使用__set和__get在数组中存储值.我希望序列化看起来像是一个扁平的对象.换句话说,我的班级看起来像:

class Proxy
{
    public $data = array();
    public function __get($name)
    { 
        return $data[$name] 
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要一个foreach循环来返回$ data中的所有键和值,当我说:

foreach($myProxy as $key)
Run Code Online (Sandbox Code Playgroud)

这可能吗?

php foreach proxy serialization

4
推荐指数
1
解决办法
1106
查看次数

Ruby中的跨领域日志记录

我正在尝试从外部向方法添加日志记录(面向方面​​的样式)

class A
  def test
    puts "I'm Doing something..."
  end
end

class A # with logging!
  alias_method :test_orig, :test
  def test
    puts "Log Message!"
    test_orig
  end
end

a = A.new
a.test
Run Code Online (Sandbox Code Playgroud)

上面的工作没问题,只是如果我再次需要为方法做别名,它会进入一个无限循环.我想要一些更像super的东西,我可以根据需要多次扩展它,并且每个扩展名都使用别名作为其父级.

ruby aop metaprogramming

4
推荐指数
1
解决办法
938
查看次数

快速解析haskell中的大型utf-8文本文件

我有一个300MB的文件(链接),其中包含utf-8字符.我想写一个相当于的haskell程序:

cat bigfile.txt | grep "^en " | wc -l
Run Code Online (Sandbox Code Playgroud)

这在我的系统上以2.6s运行.

现在,我正在将该文件作为普通字符串(readFile)读取,并具有:

main = do
    contents <- readFile "bigfile.txt"
    putStrLn $ show $ length $ lines contents
Run Code Online (Sandbox Code Playgroud)

几秒钟后,我收到此错误:

Dictionary.hs: bigfile.txt: hGetContents: invalid argument (Illegal byte sequence)
Run Code Online (Sandbox Code Playgroud)

我想我需要使用更友好的utf-8?如何快速兼容utf-8?我读到了Data.ByteString.Lazy的速度,但Real World Haskell说它不支持utf-8.

parsing haskell utf-8

4
推荐指数
1
解决办法
1541
查看次数

合并列表中的等效项

假设我有以下类型

type Key = String
type Score = Int
data Thing = Thing Key Score
Run Code Online (Sandbox Code Playgroud)

如果我有这样的数组:

[Thing "a" 7, Thing "b" 5, Thing "a" 10]
Run Code Online (Sandbox Code Playgroud)

是否有一种标准方法来减少这种情况,以便我没有任何重复的密钥?如果两个键匹配,我想获得更好的分数

[Thing "b" 5, Thing "a" 10]
Run Code Online (Sandbox Code Playgroud)

haskell

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

如何在绑定操作中使用非monadic函数

我觉得我应该已经知道了这一点,但是如何fromMaybe在一行中使用而不是将其分成2行let

main = do
    maybePort <- lookupEnv "PORT"
    let port = fromMaybe "4020" maybePort
    putStrLn $ "Listening on:" ++ port
Run Code Online (Sandbox Code Playgroud)

monads haskell

4
推荐指数
1
解决办法
83
查看次数

Cabal沙箱使用全局依赖.无法解决

我正在尝试添加timerep到现有的应用程序.我无法解决我的依赖关系.看起来它正在使用全局安装的版本time == 1.4.2,什么时候>= 1.5才适合我的应用程序.

如何让cabal使用时间1.5?我已经通过unix,tls,process,timerep进行了调查,如果只是使用它们,它们似乎都可以正常工作time >= 1.5.

这是错误:

serials> cabal install --only-dependencies
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: serials-0.1.0.2 (user goal)
trying: mandrill-0.2.2.0 (dependency of serials-0.1.0.2)
trying: http-client-tls-0.2.2 (dependency of mandrill-0.2.2.0)
trying: tls-1.2.17 (dependency of http-client-tls-0.2.2)
trying: x509-validation-1.5.2 (dependency of tls-1.2.17)
trying: process-1.2.0.0/installed-487... (dependency of x509-validation-1.5.2)
next goal: unix (dependency of process-1.2.0.0/installed-487...)
rejecting: unix-2.7.0.1/installed-299... (conflict: unix =>
time==1.4.2/installed-bf9..., serials => time>=1.5)
rejecting: unix-2.7.1.0, 2.7.0.1, 2.7.0.0, 2.6.0.1, 2.6.0.0, 2.5.1.1, 2.5.1.0,
2.5.0.0, …
Run Code Online (Sandbox Code Playgroud)

haskell cabal

4
推荐指数
1
解决办法
254
查看次数

将数据构造函数映射到类型

我正在创建一个允许管理员构建表单的应用程序,用户可以填写该表单.问题可以是不同类型的.每种问题都对应于一种响应数据.

是否可以在类型级别对此进行编码?你会如何组织这个?

data QuestionType = EmailText | PlainText | Numeric

-- this doesn't have any response information, it's the metadata
-- about the question itself.
data Question = { id :: ID, label :: Text, questionType :: QuestionType }

data Answer = { questionID :: ID, response :: Response }

-- I would like to map those question types to different response types
data Response = ???
-- EmailText => Text
-- PlainText => Text
-- Numeric   => Int
Run Code Online (Sandbox Code Playgroud)

我已经考虑过Type …

haskell types algebraic-data-types

4
推荐指数
1
解决办法
123
查看次数

使用capistrano仅部署到一个角色/服务器

我正在尝试设置多个角色,一个用于直播,另一个用于开发.它们看起来像这样:

role :live, "example.com"
role :dev, "dev.example.com"
Run Code Online (Sandbox Code Playgroud)

但是,当我运行cap deploy时,它会为两个服务器执行.我尝试了以下内容,它总是在两者上执行.

cap deploy live
cap ROLE=live deploy
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我知道我可以编写一个只响应一个角色的自定义任务,但我不想编写一大堆任务只是为了告诉它响应一个或另一个角色.谢谢!

ruby capistrano

3
推荐指数
1
解决办法
5674
查看次数

如何使用span将列表拆分为块?

我可以使用库函数重写它吗?

chunks :: ([a] -> ([a], [a])) -> [a] -> [[a]]
chunks f [] = []
chunks f xs = case c of
  [] -> cs
  ys -> ys : cs
  where
    (c, rest) = f xs
    cs = chunks f rest
Run Code Online (Sandbox Code Playgroud)

如果我给它一个span类似于总是从列表中取出一个元素的函数,它将使用列表并返回一个列表,其中包含每次调用函数时断开的元素的子列表.

haskell

3
推荐指数
1
解决办法
195
查看次数

函数如"when"但返回值?

有没有办法更简洁地写这个?我有很多看起来像这样的功能.它们中的每一个都有一些布尔条件,然后返回一个值或Nothing

rootMiddleware :: Application -> Application
rootMiddleware app req respond =
    fromMaybe next . fmap respond $
          serveIndex ["questionnaire"] "../app/answer/answer.html" req
      <|> serveIndex ["survey"] "../app/builder/builder.html" req
      <|> redirect [] "/survey/forms" req

  where
    next = app req respond

serveIndex :: [Text] -> FilePath -> Request -> Maybe Response
serveIndex prefix fp req =
    if prefix `isPrefixOf` pathInfo req
      then Just $ responseFile status200 [("Content-Type", "text/html")] fp Nothing
      else Nothing

redirect :: [Text] -> ByteString -> Request -> Maybe Response
redirect …
Run Code Online (Sandbox Code Playgroud)

monads haskell applicative maybe

3
推荐指数
1
解决办法
107
查看次数