我编写了一个 Elm 代码片段,它会绘制一个正方形,并在每次单击鼠标时在红色和黑色之间更改正方形颜色。
然而,changeColor函数中的case结构不能按预期工作,而使用if结构实现的changeColor可以工作。
我应该怎么做才能找出问题所在?谢谢。
import Color exposing (red, black, blue, Color)
import Signal exposing ((<~))
import Graphics.Element exposing (Element, show)
import Graphics.Collage exposing (collage, square, filled, Form)
import Mouse
import Window
main : Signal Element
main =
scene <~ (Signal.foldp changeColor black Mouse.clicks)
scene : Color -> Element
scene color =
collage 600 600 [ filled_square color ]
changeColor : () -> Color -> Color
changeColor _ color =
case color of …Run Code Online (Sandbox Code Playgroud) 以下正则表达式在此处测试时成功运行,但是当我尝试将其实现到我的 Java 代码中时,它不会返回匹配项。它使用负前瞻来确保MAIN LEVEL和之间不会出现换行符Bedrooms。为什么它在 Java 中不起作用?
正则表达式
^\s*\bMAIN LEVEL\b\n(?:(?!\n\n)[\s\S])*\bBedrooms:\s*(.*)
爪哇
pattern = Pattern.compile("^\\s*\\bMAIN LEVEL\\b\\n(?:(?!\\n\\n)[\\s\\S])*\\bBedrooms:\\s*(.*)");
match = pattern.matcher(content);
if(match.find())
{
//Doesn't reach here
String bed = match.group(1);
bed = bed.trim();
}
Run Code Online (Sandbox Code Playgroud)
content 只是从文本文件读取的字符串,其中包含上面链接的演示中显示的确切文本。
File file = new File("C:\\Users\\ME\\Desktop\\content.txt");
content = new Scanner(file).useDelimiter("\\Z").next();
Run Code Online (Sandbox Code Playgroud)
更新:
我更改了代码以包含多行修饰符(?m),但它打印出“null”。
pattern = Pattern.compile("(?m)^\\s*\\bMAIN LEVEL\\b\\n(?:(?!\\n\\n)[\\s\\S])*\\bBedrooms:\\s*(.*)");
match = pattern.matcher(content);
if(match.find())
{ // Still not reaching here
mainBeds=match.group(1);
mainBeds= mainBeds.trim();
}
System.out.println(mainBeds); // Prints null
Run Code Online (Sandbox Code Playgroud) 我认为如果我能算出生命周期符号,这可能会起作用,我错了吗?
pub fn from<T:Pattern>(from: T) -> Result<Tag, &'static str> {
match from {
'A'|"A" => Ok(Tag::ChA),
'B'|"B" => Ok(Tag::ChB),
'C'|"C" => Ok(Tag::ChC),
'D'|"D" => Ok(Tag::ChD),
'T'|"Tmpr" => Ok(Tag::Tmpr),
'Y'|"Batt" => Ok(Tag::Batt),
'L'|"Acc" => Ok(Tag::Acc),
_ => Err("Error: unknown channel"),
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试删除垂直制表符。我尝试过使用\v,但这似乎也匹配换行符:
$str =~ s/\v/ /;
如何在 perl 中仅匹配垂直制表符?
这是所需的输出:
"bacillus thurungensis" in "bacillus thurungensis"
TRUE
"bacillus thurungensis" in "Sentence containing bacillus thurungensis."
TRUE
"bacillus thurungensis" in "Subspecies bacillus thurungensis34"
FALSE
"bacillus thurungensis" in "bacillus thurungensis, bacillus genus"
TRUE
"bacillus thurungensis" in "Notbacillus thurungensis, must match word"
FALSE
Run Code Online (Sandbox Code Playgroud)
Python 通常认为任何子字符串匹配都是好的,但我并不是在寻找这一点。我希望某些正则表达式或匹配运算符仅当且仅当它将查询视为主题中的单独单词而不仅仅是子字符串时才产生 true。这怎么能实现呢?
我正在使用 sed 并且我有一个文件包含
苹果
橙子
香蕉
橙子
我只想在第一个橙子之后插入“梨”。所以输出应该是这样的
苹果
橙子
梨
香蕉
橙子
我使用了这个 sed 选项:
sed -i '0,/orange/a pear' 文件名
但这给了我这样的输出:
苹果
梨
橙子
梨
香蕉
橙子
我使用 Scala 一段时间了,但它仍然给我带来很多麻烦。我不知道他们为什么把事情搞得这么复杂。当该案例类只有两个成员时,我试图理解匹配的案例类
def main(args: Array[String]): Unit = {
case class X(a: String, i: Int)
def doSome(x: X): Unit = {
x match {
case "x" X 1 => print("ahhh") // <---- HERE !
case X(_, _) => println("")
}
}
doSome(X("x", 1))
case class Y(a: String, i: Int, j: Int)
def doAnother(y:Y): Unit = {
y match {
case "y" X 1 => print("ahhh") // how to make similar syntax when there are more than one syntax ?
case …Run Code Online (Sandbox Code Playgroud) (我是 F# 新手)。我在 F# 中有以下定义:
init i j =
{ Id = Guid.NewGuid ()
InnerRows = [0 .. 2] |> List.map (Cell.init i j)
SelectedInnerRow = None}
let update msg m =
match msg with
| Select id -> { m with SelectedInnerRow = id }
| Reset -> init
Run Code Online (Sandbox Code Playgroud)
其中更新函数在“重置 -> 初始化”上显示以下错误: 模式匹配表达式的所有分支必须返回与第一个分支相同类型的值,其中此处为“模型”。该分支返回类型为 ''a -> 'b -> Model' 的值
“a -> 'b -> Model”是什么意思,如何解决这个问题?
谢谢。
TIA
我有一个如下定义的数据构造函数:
data Stack a = Empty | NonEmpty a (Stack a)
deriving (Show, Read, Eq)
Run Code Online (Sandbox Code Playgroud)
然后我有一个将其与模式匹配一起使用的函数:
func :: Stack a -> a
func (Stack.NonEmpty val Stack.Empty) = ...
func (Stack.NonEmpty val1 (Stack.NonEmpty val2 Stack.Empty)) = ...
Run Code Online (Sandbox Code Playgroud)
我想做的是使用类似序列或列表的操作符进行模式匹配,如下所示:
func :: Stack a -> a
func (val :> Stack.Empty) = ...
func (val1 :> val2 :> Stack.Empty) = ...
Run Code Online (Sandbox Code Playgroud)
我知道它实际上不是一个运算符,而是一个数据构造函数,看起来像一个运算符,但我无法使其工作。
几周前我也开始学习 Haskell。
我知道 C# 中的模式匹配类似于:
if (x is TypeY y)
{
// do thing...
}
Run Code Online (Sandbox Code Playgroud)
这或多或少相当于:
if (x is TypeY)
{
var y = (TypeY)x;
// do thing...
}
Run Code Online (Sandbox Code Playgroud)
但是,我在编写 IntelliSense 建议的代码时发现了一些东西。我有以下代码:
if (top is { } t)
{
// do stuff if 'top' is NOT NULL
}
Run Code Online (Sandbox Code Playgroud)
本来我以为我能做到if (top is not null t),结果却做不到;然后我转向if (top is int t),就在那时我提出了这个建议。这是什么意思?它是如何工作的?我只在 switch 语句中的模式匹配方面见过它,例如:
class Point
{
public int X { get; set; }
public int Y { get; set; }
} …Run Code Online (Sandbox Code Playgroud)