gpt4 book ai didi

mysql - 类型之间的空间是什么意思?

转载 作者:行者123 更新时间:2023-12-01 00:01:57 24 4
gpt4 key购买 nike

这一定是非常基础的东西。我不熟悉语法,这是我第一个最困难的问题。下面的 connection 返回类型为 IO Connection 的东西 - 但我不明白 IO 和 Connection 是如何连接的/它是什么意思。如果可以,请说说这个操作中IO的目的是什么,我该如何松动它。

{-# LANGUAGE OverloadedStrings #-}

import Database.MySQL.Simple

-- This returns `IO Connection'
connection :: Connection
connection = do
c <- connect defaultConnectInfo
{ connectPassword = "password",
connectDatabase = "database" }
return c
-- Possibly need to do something to `c', but don't know what

first_table :: IO String
first_table = do
[Only i] <- query_ connection "show tables"
return i

test_query :: IO Int
test_query = do
[Only i] <- query_ connection "select 2 + 2"
return i

但是,我的最终目标是找到一种方法仅连接到数据库一次,将连接句柄存储在某处并在调用第一个或第二个函数时重用它。我离理解如何做到这一点还差得很远(例如,在 Erlang 中,我需要打开一个单独的进程并等待请求连接的消息,这是非常麻烦和不舒服的 - 所以我希望,我不会需要经历那样的事情......)。

提前致谢。

编辑:

{-# LANGUAGE OverloadedStrings #-}

import Database.MySQL.Simple
-- I need, instead of this function something that only connects once to the databse.
connection :: IO Connection
connection = do
c <- connect defaultConnectInfo
{ connectPassword = "password",
connectDatabase = "database" }
return c

first_table :: IO String
first_table = do
c <- connection
[Only i] <- query_ c "show tables"
return i

test_query :: IO Int
test_query = do
c <- connection
[Only i] <- query_ c "select 2 + 2"
return i

connection 看作是,好吧,让它成为 Java 来改变一下:

public Connection getConnection() {
if (connection == null) connection = /* JDBC does it's dirty job
and creates connection handle */
return connection;
}

最佳答案

IO是参数化类型(在 Haskell 中称为类型构造函数或在 C#/Java 中称为泛型)。在这种情况下 String是它的类型参数。

IO String在 Haskell 中会写成 IO<String>在 Java/C#/C++ 中。

关于mysql - 类型之间的空间是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9535326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com