developer tip

Ruby의 다른 괄호는 무엇을 의미합니까?

copycodes 2020. 9. 22. 08:21
반응형

Ruby의 다른 괄호는 무엇을 의미합니까?


루비에서의 차이 무엇 {}[]?

{} 코드 블록과 해시 모두에 사용되는 것 같습니다.

있습니다 []만 배열에 대해?

문서가 명확하지 않습니다.


상황에 따라 다릅니다.

  1. 자체적으로 또는 변수에 할당 할 때 []배열을 {}만들고 해시를 만듭니다. 예 :

    a = [1,2,3] # an array
    b = {1 => 2} # a hash
    
  2. []사용자 정의 메소드로 재정의 할 수 있으며 일반적으로 해시에서 항목을 가져 오는 데 사용됩니다 (표준 라이브러리 []는와 동일한 해시에 대한 메소드로 설정 fetch) 동일한
    클래스 메소드로 사용되는 규칙도 있습니다. static CreateC # 또는 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. 이것은 아마도 가장 까다로운 것입니다- {}블록에 대한 구문이기도하지만 인수 괄호 밖의 메서드에 전달 될 때만 가능합니다.

    괄호없이 메서드를 호출하면 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"]

대체로 말해서 맞습니다. 해시뿐만 아니라 일반적인 스타일은 여러 줄에 / {}사용하는 대신 한 줄에 모두 들어갈 수있는 블록에 대해 중괄호 가 자주 사용된다는 것입니다 .doend

대괄호 []는 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"대신 "{...}"와 같이 중괄호를 사용할 수도 있습니다.

Another case where you can see square brackets or curly brackets used - is in the special initializers where any symbol can be used, like:

%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"

a few examples:

[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

Note that you can define the [] method for your own classes:

class A
 def [](position)
   # do something
 end

 def @rank.[]= key, val
    # define the instance[a] = b method
 end

end

참고URL : https://stackoverflow.com/questions/12565/what-do-the-different-brackets-in-ruby-mean

반응형