문제

루비,사이의 차이점은 무엇 {}[]?

{} 을 것 같다 모두에 사용되는 코드 블럭시요.

[] 에 대해서만 배열?

이 documention 지 않는 아주 분명하다.

도움이 되었습니까?

해결책

그것은 컨텍스트에 따라 달라집:

  1. 할 때 자신에,또는 할당을 변수 [] 성 배열과 {} 를 만듭시요.예:

    a = [1,2,3] # an array
    b = {1 => 2} # a hash
    
  2. [] 재정의할 수 있으로 사용자 지정 방법,그리고 일반적으로를 가져오는 데 사용되는 것에서 해시(표준 라이브러리 설정 [] 는 방법으로에 해시는 동일 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 문서 그 마지막은 예입니다.

  3. 이것은 아마도 가장 까다로운 한 {} 또한 구문을 위한 블록하지만,경우에만 전달하는 방법 외부 인수를 괄호.

    를 호출할 때는 방법을 괄호 없이,루비에서 보이는 어디를 넣은 쉼표로는 인수단(는 괄호었을 것입했다,당신이 입력한)

    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#화 및 방법#다.이 혼란스러울 수 있는 첫 번째 시간에 당신은 그것을 발생.나의 합리적인 뒤에 그것을 만드시 정상적인 함수 호출합니다.

E.g.

proc = Proc.new { |what| puts "Hello, #{what}!" }
meth = method(:print)

proc["World"]
meth["Hello",","," ", "World!", "\n"]

크게 말하기,당신이 맞습니다.뿐만 아니라,해시의 일반적인 스타일은 중괄호 {} 자주 사용되는 블록할 수 있는 맞게 모든 하나의 라인을 사용하는 대신 do/end 여러 라인입니다.

대괄호 [] 으로 사용되는 클래스 메소드에서 많은 루비스 포함하여,문자열,BigNum,Dir 혼동을 일으킬 만큼,해시입니다.그래서:

Hash["key" => "value"]

으로 유효한:

{ "key" => "value" }

대괄호[]는 초기화에 사용되는 배열입니다.문서에 대한 이니셜라이저의 경우에[]에

ri Array::[]

중괄호 안{}사용하여 초기화시요.문서에 대한 이니셜라이저의 경우{}에

ri Hash::[]

대괄호 또한 일반적으로 사용되는 방법에서 많은 핵심 루비스,배열,해시,문자열 및 다른 사람입니다.

액세스할 수 있습니다 모두의 목록이 있는 클래스 메소드"[]"정의

ri []

대부분의 방법을 또한"[]="수 있는 방법을 할당할 것이,예를 들어:

s = "hello world"
s[2]     # => 108 is ascii for e
s[2]=109 # 109 is ascii for m
s        # => "hemlo world"

중괄호도 사용할 수 있는 대신"어...끝"블록"{...}".

또 다른 경우 볼 수 있는 곳이 대괄호 또는 중괄호 사용에 이니셜라이저는 특별한 곳이 어떤 기호를 사용할 수 있습니다,다음과 같:

%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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top