亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby中Block代碼快的使用深度解析

2020-02-24 15:40:41
字體:
來源:轉載
供稿:網友

  今天小編給大家分享一篇Ruby中Block代碼快的使用深度解析,感興趣的朋友跟小編一起來了解一下吧!

  Block 定義

  some_array.each { |value| puts value + 3 }

  sum = 0

  other_array.each do |value|

  sum += value

  puts value / sum

  end

  A block is somewhat like the body of an anonymous method

  Block can take parameters

  Block 只有被 method 調用時才會起作用,如果 method 中有參數,block 出現在最后面

  Block 中的變量

  如果 block 的本地變量的名字和 block 之外但是在同樣 scope 里面的 變量名字一樣,那他們兩個是一樣的。block 內變量的值會改變 block 外變量的值。

  sum = 0

  [1,2,3,4].each do |value|

  sum += value

  puts value / sum

  end

  puts sum # => 30

  如果 block 中的變量只出現在 block 中,那么它只是 block 中本地變量,無法在 block 之外被引用。

  sum = 0

  [1,2,3,4].each do |value|

  square = value * value

  sum += square

  end

  puts sum # => 30

  puts square # undefined local variable or method 'square' for main:Object

  Parameters to a block are always local to a block, even if they have the same name as locals in the surrounding scope.

  value = "some shape"

  [1,2].each { |value| puts value }

  puts value

  # 1

  # 2

  # some shape

  You can define a block-local variables by putting them after s semicolon in the block's parameter list

  square = "some shape"

  sum = 0

  [1,2,3,4].each do |value; square|

  square = value * value

  sum += square

  end

  puts sum # 30

  puts square # some shape

  By making square block-local, values assigned inside the block will not affect the value of the variable with the same name in the outer scope.

  Blocks for Transactions

  You can use blocks to define a chunk of code that must be run under some kind of transnational control

  class File

  def self.open_and_process(*args)

  f = File.open(*args)

  yield f

  f.close

  end

  end

  File.open_and_process("testfile","r") do |file|

  while line = file.gets

  puts line

  end

  end

  Blocks Can Be Objects

  You can convert a block into an object, store it in variables, pass it around, and then invoke its code later.

  如果 method 的最后一個參數前面有 & 符號 (&action), 那么當此 method 被調用時,Ruby 會找一個 code block, 這個 code block 被轉換成 class Proc 的一個對象。

  class ProcExample

  def pass_in_block(&action)

  @stored_proc = action

  end

  def use_proc(parameter)

  @store_proc.call(parameter)

  end

  end

  eg = ProcExample.new

  eg.pass_in_block { |param| puts "The parameter is #{param}" }

  eg.use_proc(99)

  # => The parameter is 99

  def create_block_object(&block)

  block

  end

  bo = create_block_object { |param| puts "You called me with #{param}" }

  bo.call 99 # => You called me with 99

  bo.call "cat" # => You called me with cat

  Ruby have two built-in methods that convert a block to an object: lambda and Proc.new

  bo = lambda { |param| puts "You called me with #{param}" }

  bo.call 99 # => You called me with 99

  Blocks Can Be Closures

  Closure: Variables in the surrounding scope that are referenced in a block remain accessible accessible for the life of that block and the life on any Proc object created from that block.

  def n_times(thing)

  lambda {|n| thing * n}

  end

  p1 = n_times(23)

  p1.call(3) #=> 69

  p2.call(4) #=> 92

  def power_proc_generator

  value = 1

  lambda { value += value }

  end

  power_proc = power_proc_generator

  puts power_proc.call # 2

  puts power_proc.call # 4

  lambda 表達式的另一種簡寫方式

  lambda { |params| ... }

  # 與下面的寫法等價

  -> params { ... }

  # parmas 是可選的

  proc1 = -> arg1, arg2 {puts "#{arg1} #{arg2}"}

  proc1.call "hello", "world"

  # => hello world

  proc2 = -> { "Hello World" }

  proc2.call # => Hello World

  Block Parameter List

  Blocks can take default values, splat args, keyword args and a block parameter

  proc = -> a, *b, &block do

  puts "a = #{a.inspect}"

  puts "b = #{b.inspect}"

  block.call

  end

  proc.call(1,2,3,4) {puts "in block"}

  # a = 1

  # b = [2,3,4]

  # in block

  以上就是Ruby中Block代碼快的使用深度解析,想必都了解了吧,更多相關內容請繼續關注武林技術頻道。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品视频在线观看| 国产精品v日韩精品| 日韩美女av在线| 亚洲激情小视频| 欧美激情精品久久久久久免费印度| 久久国产精品久久国产精品| 大荫蒂欧美视频另类xxxx| 一夜七次郎国产精品亚洲| 久久中文久久字幕| 91成人在线播放| 欧美精品video| 久久香蕉国产线看观看av| 精品激情国产视频| 国语自产精品视频在线看抢先版图片| 日韩精品久久久久久久玫瑰园| 亚洲电影成人av99爱色| 欧美日韩成人免费| 日韩中文在线视频| 欧美电影电视剧在线观看| 久久精品国产亚洲一区二区| 性亚洲最疯狂xxxx高清| 97在线观看视频国产| 欧洲成人免费视频| 国产成人精品视频在线| 久久国产加勒比精品无码| 国产视频亚洲视频| 亚洲欧美国产制服动漫| 91精品国产777在线观看| 日韩亚洲精品视频| 欧美日韩中文字幕日韩欧美| 国产精选久久久久久| 亚洲激情成人网| 欧美性极品xxxx娇小| 亚洲精品一区久久久久久| 一本色道久久综合狠狠躁篇怎么玩| 45www国产精品网站| 国产精品久久婷婷六月丁香| 久久亚洲私人国产精品va| 久久视频在线直播| 国产精品一区=区| 国产成人综合精品在线| 青草青草久热精品视频在线观看| 欧美精品国产精品日韩精品| 欧美高跟鞋交xxxxxhd| 欧美日韩在线免费| 中文字幕久久精品| 久久久精品国产一区二区| 欧美黄色片免费观看| 日本精品久久久久影院| 青青草精品毛片| 久热精品视频在线免费观看| 午夜精品久久久久久久99黑人| 欧美人成在线视频| 毛片精品免费在线观看| 一区二区三区高清国产| 不卡伊人av在线播放| 蜜臀久久99精品久久久久久宅男| 萌白酱国产一区二区| 国产精品av免费在线观看| 全亚洲最色的网站在线观看| 亚洲天堂成人在线视频| 欧美性色视频在线| 日韩成人在线播放| 国产精品日韩一区| 综合欧美国产视频二区| 成人国产精品色哟哟| 成人国产精品一区| 国产成人+综合亚洲+天堂| 国内偷自视频区视频综合| 久久久av电影| 丝袜情趣国产精品| 97久久精品视频| 在线视频精品一| 成人黄色免费看| 欧美亚洲国产日韩2020| 日韩av电影国产| 欧美日韩性视频| 欧美三级欧美成人高清www| 国产精品久久婷婷六月丁香| 欧美丰满片xxx777| 欧美激情2020午夜免费观看| 久久在精品线影院精品国产| 亚洲黄色片网站| 97视频在线观看免费高清完整版在线观看| 日韩中文字幕视频| 精品女厕一区二区三区| 欧美大全免费观看电视剧大泉洋| 91久久在线播放| 欧美午夜www高清视频| 亚洲精品短视频| 亚洲资源在线看| 日本一区二三区好的精华液| 欧美在线欧美在线| 亚洲人成在线观看| 亚洲国产日韩一区| 北条麻妃在线一区二区| 国产91色在线免费| 日韩激情av在线播放| 91久久久久久久久久久久久| 久久久精品影院| 色综合伊人色综合网站| 超薄丝袜一区二区| 久久久视频精品| 日韩中文字幕在线视频播放| 日本一区二区三区四区视频| 国模精品一区二区三区色天香| 91系列在线播放| 欧美疯狂做受xxxx高潮| 不卡av在线网站| 91精品免费看| 国产欧美一区二区白浆黑人| 日本免费一区二区三区视频观看| 欧美日韩精品在线观看| 午夜精品视频网站| 日韩av有码在线| 日韩免费高清在线观看| 日本免费一区二区三区视频观看| 国产福利精品av综合导导航| 日韩精品小视频| 欧美激情免费在线| 久久精品国产一区二区电影| 热门国产精品亚洲第一区在线| 欧美另类在线观看| 91免费国产视频| 亚洲美女免费精品视频在线观看| 国产免费亚洲高清| 欧美日韩国产色| 国产在线视频91| 日韩av免费在线观看| 欧美激情二区三区| 51视频国产精品一区二区| 国产成人avxxxxx在线看| 中文字幕亚洲欧美日韩在线不卡| 精品视频—区二区三区免费| 国产精品久久久久77777| 国产手机视频精品| 欧美视频在线视频| 97免费视频在线| 亚洲精品福利免费在线观看| 久久精品中文字幕免费mv| 日韩免费观看高清| 亚洲女人天堂色在线7777| 久久久久久久久亚洲| 疯狂做受xxxx欧美肥白少妇| 亚洲曰本av电影| 4438全国亚洲精品在线观看视频| 国产成人精品最新| 欧美裸体视频网站| 成人黄色av播放免费| 久久视频在线视频| 国产视频精品免费播放| 亚洲欧洲激情在线| 国产香蕉精品视频一区二区三区| 日韩专区中文字幕| 日本视频久久久| 国产999精品久久久影片官网| 国产午夜精品全部视频在线播放| 国产精品久久久久久久av大片| 欧美电影免费观看| 亚洲综合中文字幕68页| 精品久久中文字幕| 欧美电影免费观看| 国产精品一区二区女厕厕| 欧美疯狂做受xxxx高潮|