プログラミングElixir 4章


このエントリーをはてなブックマークに追加

プログラミングElixirの第4章を読んでみてる

Elixirはバージョン1.3.3を使用している


with do endについて

4.7 変数スコープのところで with do end がでてきてなんだこれって思ったけど

ひとまず、他の関数型言語でいうところのlet doみたいなもの?なのかな?
http://qiita.com/HirofumiTamori/items/591925f6c09de6c67422

なんかリンク先ではwith do:になっててendがないけど、とりあえず試してみる

ひとまず使ってみるだけなら以下のようにしてみれば動くことは動く

test.exs
1
2
3
4
5
6
7
8
9
owner = "some name"
with name = "/etc/passwd",
stat = File.stat!(name),
owner = stat.uid,
do:
IO.puts "#{name} is owned by user ##{owner}"
IO.puts "And #{owner} is still someone"

ElmとかHaskellで出てくるlet do構文に確かに似てて

プログラミングElixir内でも、「ローカル変数のスコープを定義する」と書かれている(2つある役割の一つ)

withの中で変数に値を入れて、doの中でその変数を使う、みたいな使い方なのかなこの例をみると


with do: の部分を変数に格納することもできる

下記のようにもできる

test.exs
1
2
3
4
5
6
7
8
9
10
owner = "some name"
sample_test = with name = "/etc/passwd",
stat = File.stat!(name),
owner = stat.uid,
do:
IO.puts "#{name} is owned by user ##{owner}"
IO.puts "And #{owner} is still someone"
IO.puts sample_test


ちなみにこれ、IO.puts sample_testのところをコメントアウトして実行すると以下のエラーが出る

1
2
3
4
5
warning: variable sample_test is unused
test.exs:3
/etc/passwd is owned by user #0
And some name is still someone

ググると以下が出てきた

is there a way to suppress warnings like variable x is unused ?

変数sample_testは使われてませんよって警告

Rubyでもunused variableって警告が出て来ることがあって、無駄な変数が定義されてるときに警告してくれるものっぽい

Elixirではこういうふうに出てくるんだな

で、プログラミングElixirにはwith do endの構文でのってるけど、これでやるとエラーになる・・・

以下はエラーになる

1
2
3
4
5
6
7
8
9
10
owner = "some name"
sample_test = with name = "/etc/passwd",
stat = File.stat!(name),
owner = stat.uid,
do
IO.puts "#{name} is owned by user ##{owner}"
IO.puts "And #{owner} is still someone"
end

なんか仕様が変わったのかな、、、このあたりはわからない


このエントリーをはてなブックマークに追加