2014-09-05 24 views
0

假设,我们有以下ALIST:如何更改值在2维ALIST

(setq sql-connection-alist 
     '((local 
     (sql-product 'mysql) 
     (sql-server "localhost") 
     (sql-user "user") 
     (sql-password "") 
     (sql-database "") 
     (sql-port 3306)))) 

而且功能:

(defun sql-local() 
    "Connect to the local MySQL server" 
    (interactive "sWhat database do you want to connect? ") 
    (let ((symbol (intern key))) 
    ;here I want to set the database field for sql-database = symbol 
    (sql-connect-preset symbol))) 

如果我在Perl做到了,它会是这样的这样的:

my %databases = (
    "local" => { 
     "sql-product" => "mysql", 
     "sql-server" => "localhost", 
     "sql-user" => "user", 
     "sql-password" => "", 
     "sql-database" => "", 
     "sql-port" => "3306", 
    }, 
); 

$databases{local}->{sql-database} = $symbol; 

回答

1

如果你不知道你是否发现你在sql-connection-alist使用想要的东西:

(let ((place (assoc 'sql-database (assoc 'local sql-connection-alist)))) 
    (when (consp place) 
    (setcdr place (list symbol)))) 

否则,你也可以使用:

(setcdr (assoc 'sql-database (assoc 'local sql-connection-alist)) (list symbol))