루비에서의 차이 무엇 {}
과 []
?
{}
코드 블록과 해시 모두에 사용되는 것 같습니다.
있습니다 []
만 배열에 대해?
문서가 명확하지 않습니다.
답변
상황에 따라 다릅니다.
-
자체적으로 또는 변수에 할당 할 때
[]
배열을{}
만들고 해시를 만듭니다. 예 :a = [1,2,3] # an array b = {1 => 2} # a hash
-
[]
사용자 정의 메소드로 재정의 할 수 있으며 일반적으로 해시에서 항목을 가져 오는 데 사용됩니다 (표준 라이브러리[]
는와 동일한 해시에 대한 메소드로 설정 됨fetch
) 동일한
클래스 메소드로 사용되는 규칙도 있습니다.static Create
C # 또는 Java에서 메소드를 사용할 수 있습니다 . 예 :a = {1 => 2} # create a hash for example puts a[1] # same as a.fetch(1), will print 2 Hash[1,2,3,4] # this is a custom class method which creates a new hash
마지막 예제 는 Ruby Hash 문서 를 참조하십시오 .
-
이것은 아마도 가장 까다로운 것 일 것입니다-
{}
또한 블록에 대한 구문이지만 인수 괄호 밖의 메서드에 전달 될 때만 가능합니다.괄호없이 메서드를 호출하면 Ruby는 쉼표를 넣은 위치를 확인하여 인수가 끝나는 위치 (입력 한 괄호가 있었던 위치)를 파악합니다.
1.upto(2) { puts 'hello' } # it's a block 1.upto 2 { puts 'hello' } # syntax error, ruby can't figure out where the function args end 1.upto 2, { puts 'hello' } # the comma means "argument", so ruby sees it as a hash - this won't work because puts 'hello' isn't a valid hash
답변
그다지 분명하지 않은 또 다른 사용법은 []
Proc # call 및 Method # call의 동의어입니다. 처음 만나면 약간 혼란 스러울 수 있습니다. 그 뒤에있는 합리적인 이유는 그것이 정상적인 함수 호출처럼 보이게 만드는 것입니다.
예
proc = Proc.new { |what| puts "Hello, #{what}!" }
meth = method(:print)
proc["World"]
meth["Hello",","," ", "World!", "\n"]
답변
대체로 말하면 맞습니다. 해시뿐만 아니라 일반적인 스타일은 여러 줄에 / 를 {}
사용하는 대신 한 줄에 모두 들어갈 수있는 블록에 대해 중괄호 가 자주 사용된다는 것입니다 .do
end
대괄호 []
는 String, BigNum, Dir 및 혼란스럽게도 Hash를 포함한 많은 Ruby 클래스에서 클래스 메서드로 사용됩니다. 그래서:
Hash["key" => "value"]
다음과 같이 유효합니다.
{ "key" => "value" }
답변
대괄호 []는 배열을 초기화하는 데 사용됩니다. 이니셜 라이저 케이스 []에 대한 문서는
ri Array::[]
중괄호 {}는 해시를 초기화하는 데 사용됩니다. {}의 이니셜 라이저 케이스에 대한 문서는
ri Hash::[]
대괄호는 또한 일반적으로 Array, Hash, String 등과 같은 많은 핵심 루비 클래스에서 메서드로 사용됩니다.
“[]”메소드가 다음과 같이 정의 된 모든 클래스 목록에 액세스 할 수 있습니다.
ri []
대부분의 메서드에는 다음과 같이 할당 할 수있는 “[] =”메서드도 있습니다.
s = "hello world"
s[2] # => 108 is ascii for e
s[2]=109 # 109 is ascii for m
s # => "hemlo world"
블록에서 “do … end”대신 “{…}”와 같이 중괄호를 사용할 수도 있습니다.
사용 된 대괄호 또는 중괄호를 볼 수있는 또 다른 경우는 다음과 같이 기호를 사용할 수있는 특수 이니셜 라이저입니다.
%w{ hello world } # => ["hello","world"]
%w[ hello world ] # => ["hello","world"]
%r{ hello world } # => / hello world /
%r[ hello world ] # => / hello world /
%q{ hello world } # => "hello world"
%q[ hello world ] # => "hello world"
%q| hello world | # => "hello world"
답변
몇 가지 예 :
[1, 2, 3].class
# => Array
[1, 2, 3][1]
# => 2
{ 1 => 2, 3 => 4 }.class
# => Hash
{ 1 => 2, 3 => 4 }[3]
# => 4
{ 1 + 2 }.class
# SyntaxError: compile error, odd number list for Hash
lambda { 1 + 2 }.class
# => Proc
lambda { 1 + 2 }.call
# => 3
답변
[]
자신의 클래스에 대한 메서드를 정의 할 수 있습니다.
class A
def [](position)
# do something
end
def @rank.[]= key, val
# define the instance[a] = b method
end
end