Codeslave просит, чтобы "Это не должен был всегда быть "$ORACLE_ HOME/network/admin/tnsnames.ora"? Ответ не, это не. Рассмотрите эти два вызова tnsping на той же машине:
C:\Documents and Settings\me>D:\Oracle\10.2.0_DB\BIN\tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 09-OCT-2
008 14:30:12
Copyright (c) 1997, 2007, Oracle. All rights reserved.
Used parameter files:
D:\Oracle\10.2.0_DB\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxxx
)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))
OK (40 msec)
C:\Documents and Settings\me>tnsping orcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 09-OCT-2
008 14:30:21
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
D:\oracle\10.2.0_Client\network\admin\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = XXXX)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))
OK (20 msec)
C:\Documents and Settings\me>
Примечание два различных расположения файлов параметра, которые зависят, на котором tnsping исполняемом файле Вы работаете (и возможно откуда это выполняется). Для находящегося в tnsnames оракула, объединяющегося в сеть, с помощью переменной TNS_ADMIN, единственный способ гарантировать, что Вы получаете последовательный tnsnames.ora файл. (ОТМЕТЬТЕ: центральный Windows ответ)
Hash["a", 100, "b", 200] #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200}
{ "a" => 100, "b" => 200 } #=> {"a"=>100, "b"=>200}
Вы не можете передать массив методу Hash []
в соответствии с документацией, поэтому знак splat просто способ взорвать массив fruit
и передать его элементы в качестве обычных аргументов методу Hash []
. Действительно, это очень распространенное использование оператора splat.
Замечательно то, что если вы попытаетесь передать нечетное количество аргументов в Hash, вы получите исключение ArgumentError
:
fruit = ["apple","red","banana","yellow","orange"]
#=> ["apple", "red", "banana", "yellow", "orange"]
Hash[*fruit] #=> ArgumentError: odd number of arguments for Hash
Посмотрите на метод открытого класса []
в классе Hash. (Скажем, здесь.) В нем четко указано, что будет создан новый хэш (экземпляр) и заполнен данными объектами. Естественно, они встречаются парами. Оператор splat существенно расширяет массив при использовании в качестве параметра.