小编jke*_*len的帖子

提供的正则表达式使用多行锚点(^或$)

我尝试编写一个图像验证格式,确保url以.png,.jpg或.gif结尾.

class Product < ActiveRecord::Base

  mount_uploader :image_url

  validates :title, :presence => true,
            :uniqueness => true
  validates :image_url, :presence => true,
                        :format => {
                           :with => %r{\.(gif|jpg|png)$}i,
                           :message => 'must be a URL for GIF, JPG or PNG image.'
                        }
end
Run Code Online (Sandbox Code Playgroud)

但是,当我启动我的服务器.看到这个:

提供的正则表达式使用多行锚点(^或$),这可能会带来安全风险.你的意思是使用\ A和\ z,还是忘了添加:multiline => true选项?

regex ruby-on-rails ruby-on-rails-4

12
推荐指数
1
解决办法
5808
查看次数

'Just'和'pure'之间的区别

Just (+) <*> Just 3 <*> Just 5
Run Code Online (Sandbox Code Playgroud)

只是8

pure (+) <*> Just 3 <*> Just 5
Run Code Online (Sandbox Code Playgroud)

只是8

pure (*3) <*> [0..10]
Run Code Online (Sandbox Code Playgroud)

[0,3,6,9,12,15,18,21,24,27,30]

Just (*3) <*> [0..10]
Run Code Online (Sandbox Code Playgroud)

无法将类型'[]'与'Maybe'匹配

预期类型:也许b

实际类型:[b]

在'(<*>)'的第二个参数中,即'[0 ... 10]'

在表达式中:Just(*3)<*> [0 .. 10]

在'it'的等式中:it = Just(*3)<*> [0 ... 10]

如果是pureJust互换,它们有什么不同的时候?

haskell functor applicative

6
推荐指数
2
解决办法
239
查看次数

将自定义数据类型转换为字符串

如果我有三个数据类型命名Expr,OpFu像这样.

data Expr = Num Double
          | X
          | Operator Op Expr Expr
          | Function Fu Expr
          deriving (Eq)

data Op = Add | Mul
        deriving (Eq)

data Fu = Sin | Cos
        deriving (Eq)
Run Code Online (Sandbox Code Playgroud)

我应该做的是稍后根据数据类型创建一个表达式.例如

let anExpr = Add (Num 3.0) (Num 4.0)
Run Code Online (Sandbox Code Playgroud)

而且打印出相应的表达式,在这种情况下它应该只是"3.0 + 4.0".

我面临的问题是创建另一种类型或数据类型来识别它是否应该打印出来的加法或乘法符号.我想做的是在伪代码中这样的事情

printOut (Num n) = show n
printOut X = "x"
printOut (Op a b) = printOut a ++ 'printOutRightOp' ++ printOut b
printOut (Fu a) = …
Run Code Online (Sandbox Code Playgroud)

haskell

6
推荐指数
1
解决办法
1198
查看次数

Haskell 子模块中的条件编译

我试图在我的程序中有条件地编译一个子模块,以在发布版本和开发版本之间切换代码的​​一小部分。

目前我正在尝试使用cpphs但是当我更改传递给 GHC 的标志以定义变量并更改 ifdef 语句堆栈时,不会重新编译这些文件。

例如,我有一个端口号,我想根据我构建的目标进行切换。我定义这个数字的代码看起来像这样。

#ifdef StableRelease 
  port = 12345
#else 
  port = 54321 
#endif
Run Code Online (Sandbox Code Playgroud)

稳定版本的 cabal 文件中有以下选项

ghc-options: -threaded -rtsopts -with-rtsopts=-N -pgmP cpphs -optP "-DStableRelease"
Run Code Online (Sandbox Code Playgroud)

当我运行时,stack build它似乎并没有真正预处理上面的代码。有没有人有使用 cpphs 或其他预处理解决方案的经验?

haskell haskell-stack

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

如何从浏览器中的先前结果恢复数据?

我有一个在neo4j网络浏览器中运行的查询:

MATCH p=(z)<-[*]-(a)-[:foo]->(b) WHERE b.value = "bar" return p
Run Code Online (Sandbox Code Playgroud)

这返回了大量连接的节点.发生的事情似乎已经删除了所有这些节点(在一个单独的事件中),但我仍然有旧查询的输出.浏览器的代码部分列出了响应数据:

 ...
 "graph": {
        "nodes": [
          {
            "id": "1148578",
            "labels": [
              "text"
            ],
            "properties": {
              "value": "bar",
              "timestamp": 1478747946867
            }
          },
   ...
Run Code Online (Sandbox Code Playgroud)

有没有办法让我从旧查询的输出中重新创建所有这些数据?

neo4j cypher

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

为什么GHC不能推理一些无限的名单?

这个最近的问题让我想到了Haskell使用无限列表的能力.有大量 其他问题,并约在计算器上无限列表答案,我明白了为什么我们不能对所有无限列表的通用解决方案,但为什么不能哈斯克尔推理一些无限列表?

让我们使用第一个链接问题中的示例:

list1 = [1..]
list2 = [x | x <- list1, x <= 4]
print list2
$ [1,2,3,4
Run Code Online (Sandbox Code Playgroud)

@ user2297560在评论中写道:

假装你是GHCI.您的用户会为您提供无限列表,并要求您查找该列表中小于或等于4的所有值.您将如何进行此操作?(请记住,您不知道列表是否有序.)

在这种情况下,用户没有给你一个无限的列表.GHC产生了它!实际上,它是按照自己的规则生成的.该哈斯克尔2010标准规定如下:

enumFrom       :: a -> [a]            -- [n..]  
Run Code Online (Sandbox Code Playgroud)

对于Int和Integer类型,枚举函数具有以下含义:

  • 序列enumFrom e1是列表[ e1,e1+ 1,e1+ 2,...].

在他对另一个问题的回答中,@ chepner写道:

你知道列表是单调递增的,但Haskell没有.

这些用户所做的陈述似乎与我的标准不符.Haskell使用单调增加以有序的方式创建了列表.Haskell 应该知道列表是有序的和单调的.那么为什么不能将这个无限列表自动[x | x <- list1, x <= 4]转化takeWhile (<= 4) list1呢?

haskell list ghc compiler-optimization

3
推荐指数
2
解决办法
161
查看次数

条件&&未能短路

我有一个简单的条件检查,看看一个对象(称为模型)是否与另一个对象(称为关联)有一个has_many关联.

if model.respond_to? association.pluralize.to_s && !model.send(association.pluralize).nil?
  puts "Hello World"
end
Run Code Online (Sandbox Code Playgroud)

每次调用此检查时,rails都会undefined method在模型上为该关联抛出一个.

在控制台中调试时,我试图分开代码失败的地方.

if model.respond_to? association.pluralize.to_s 
  puts "Hello World"
end
Run Code Online (Sandbox Code Playgroud)

通过删除条件的后半部分,它会停止失败(并且不会按预期打印).也model.respond_to? association.pluralize.to_s直接检查,总是返回false.

所以我又试了一次:

if false && !model.send(association.pluralize).nil?
  puts "Hello World"
end
Run Code Online (Sandbox Code Playgroud)

这样工作正常,没有任何错误,也没有打印(我想要).

那么为什么在第一组代码中,条件不短路呢?第一部分总是返回false,但是后半部分仍然被评估导致NoMethodError.是否有一些"陷阱" respond_to?send导致这种情况?还是更简单的东西?任何帮助都会非常感谢!

ruby ruby-on-rails

2
推荐指数
1
解决办法
336
查看次数

为什么我的HTTP状态类型重叠?

我与一些HTTP代码工作并获得当我建立(使用编译器警告stack build),警告重叠的图案在我的案件处理不同的HTTP响应相匹配.我正在使用这些包裹

 import Network.HTTP.Types.Status (ok200, status203, Status)
 import Network.HTTP.Conduit
 import Network.HTTP.Types.Header
Run Code Online (Sandbox Code Playgroud)

有问题的代码是:

 ... -- setup stuff for other functions.
 -- getHttpResponse just uses "httpLbs req mngr" with some additional error wrapping
 resp <- liftIO $ getHttpResponse mngr req
    case resp of
      Nothing -> ExceptT $ return $ Left $ create $ "could not get a response from " <> uri
      Just r -> case responseStatus r of
              ok200 -> do 
                  case decode (responseBody r) of
                    Nothing -> throwIOError …
Run Code Online (Sandbox Code Playgroud)

haskell

2
推荐指数
1
解决办法
67
查看次数

Aeson解码JSON对象,该对象可以是字符串或int

我正在处理来自REST服务器的一些格式复杂的JSON响应。为了解码它们,我有几种数据类型来处理不同的嵌套对象。例如:

... Other types ...

data Profile =
  Profile { fields :: [KVPair]
  } deriving (Show)

instance FromJSON Profile where
  parseJSON (Object v) =
    Profile <$> v .: "Fields" 
  parseJSON _ = mzero

data KVPair =
  KVPair { key :: Int
         , value :: String
  } deriving (Show)

instance FromJSON KVPair where
  parseJSON (Object v) =
    KVPair <$> v .: "Key"
           <*> v .: "Value" 
  parseJSON _ = mzero
Run Code Online (Sandbox Code Playgroud)

除最终的KVPair类型外,其他所有功能均可用。我的JSON对象都具有整数键;但是,值可以是整数或字符串:

      {
        "Key": 0,
        "Value": "String Value!"
      },
      {
        "Key": 1, …
Run Code Online (Sandbox Code Playgroud)

haskell aeson

2
推荐指数
1
解决办法
898
查看次数

是否可以组合类型类的实例?

我有一种感觉,这是不可能的,但我会喜欢一些输入,看看是否有一些我缺少的扩展或技术.

我有一个类型类的通用实例,它定义了一些默认方法:

class TestClass a where 
  foo :: a -> Maybe Text 
  bar :: a -> [Int]

instance TestClass a where 
  foo _ = Nothing 
  bar _ = []

data SpecificType = SomeValue | OtherValue

instance TestClass SpecificType where 
  foo SomeValue = Just "Success"
  foo OtherValue = Just "Other Success"
Run Code Online (Sandbox Code Playgroud)

我相信这已经需要OverlappingInstances,但问题是TestClassfor 的实例SpecificType没有实现bar.我只想声明第二个实例的一部分,并使用其余的默认实现.有没有办法实现这个目标?

haskell

2
推荐指数
1
解决办法
89
查看次数

无法在Perl中使用特定的正则表达式

我有一个格式如下的字符串:

project-version-project_test-type-other_info-other_info.file_type
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,我可以从这个字符串中删除大部分需要的信息.当我的版本中有一个额外的限定字符时(即通常是5个字符,但有时会添加第6个字符),我的麻烦就出现了.

以前,我使用子字符串来删除多余的信息并获得'project_test-type'但是,现在我需要切换到正则表达式(主要用于处理额外的版本字符).我可以继续使用子串并根据我是否有额外的版本字符来改变长度,但正则表达式似乎更合适.

我尝试过使用以下模式:

my ($type) = $_ =~ /.*-.*-(.*)-.*/;
Run Code Online (Sandbox Code Playgroud)

但是'project_test-type'中的额外' - '意味着我不能简单地使用该字符来填充我的正则表达式.

我可以用什么正则表达式从我的字符串中获取'project_test-type'?


更多信息:作为一个更具人类可读性的示例,信息按以下方式分组:

project - version - project_test-type - other_info - other_info . file_type
Run Code Online (Sandbox Code Playgroud)
  • 'project'是一个简单的字符串
  • 'version'通常是一个由5个整数组成的字符串,但有时后跟char,即11111是正常的,11111A是罕见的.
  • 'project_test-type'是一个与项目关联的特定测试,该项目可以同时包含'_'和' - '字符
  • "other_info"的两种情况都是系统的附加信息位,如IP地址或其他版本号.第一个没有固定长度,而第二个总是10个字符长

regex perl

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

如何检查自定义类型中的所有值是否相等

我正在寻找一种更好的方法来检查给定类型的所有值是否相等.

例如,考虑:

data Foo = Foo {a :: Int, b :: Int, c :: Int, d :: Int}

allFooEqual :: Foo -> Bool
allFooEqual foo = (a foo == b foo) && (a foo == c foo) && (a foo == d foo)
Run Code Online (Sandbox Code Playgroud)

这可行,但它不是一个可扩展的解决方案.有没有更惯用的方式来执行我所缺少的这种行为?

haskell

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

如何将函数应用于另一个函数的每个参数?

我有一个带有 10 个String参数的函数,在一些重构过程中,部分代码发生了变化,所以现在这些参数Text在调用函数时结束:

fxn :: String -> ... -> IO (Int, String)
fxn a b c d e f g h i j = do something 

...

-- Get parameters for fxn
let a = "blah" :: Text
...
fxn a b c ...
Run Code Online (Sandbox Code Playgroud)

理想情况下,我可以重构所有代码以使用Text,但目前这很乏味且不理想。我还可以轻松地将 a 添加T.unpack到我获取函数参数的位置:

let a = T.unpack ("blah" :: Text)
Run Code Online (Sandbox Code Playgroud)

但同样,这不是理想的,因为对于大量参数,这种情况发生在几个不同的地方,我更愿意保持代码简洁,而不是T.unpack到处都有几十个语句。

haskell 中是否有一种方法可以组合函数以使参数变形,例如(fxn . T.unpack) a b c ...,或者将解包函数应用于 f 函数的每个参数?这似乎是一个简单的组合问题,但我一直无法找到解决方案。

haskell

0
推荐指数
1
解决办法
798
查看次数