演算子もメソッド
class CustomString < String
def +(other)
other + self + other
end
end
"foo" + "bar"
# => "foobar"
CustomString.new("foo") + "bar"
# => "barfoobar"
メソッド呼び出しの括弧が省略できる
"1,2,3".split /,/
# => ["1", "2", "3"]
ドメイン固有言語に使いやすい
e.g. CocoaPods
# Podfile
platform :ios
pod 'AFNetworking', '~> 2.0.0'
pod 'CocoaLumberjack', '< 1.7'
target 'MyApp'
(defun fizzbuzz (n)
(if (or (zerop (mod n 3))
(zerop (mod n 5)))
(progn
(when (and (zerop (mod n 3)))
(format t "fizz"))
(when (and (zerop (mod n 5)))
(format t "buzz"))
(format t " "))
(format t "~a " n)))
(dotimes (n 20)
(fizzbuzz (1 + n)))
# 代入は`=`も使えるが`<-`が推奨されている
s <- 100000
# 逆向きにも代入できる
4 -> t
# `<-`は関数のため式の中にも書ける
sum(runif(s <- 100000)^2 + runif(s)^2 <= 1) * 4 / s
s <- c(1, 2, 3)
t <- c(4, 5, 6)
s + t
# [1] 5 7 9
関数の命名がバラバラ
# https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/read.table
read.csv(file)
# https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/readLines
readLines(con)
# https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/readline
readline(prompt)
# https://www.rdocumentation.org/packages/readxl/versions/0.1.1/topics/read_excel
read_excel(path)
# https://www.rdocumentation.org/packages/MCMCpack/versions/1.6-1/topics/read.Scythe
read.Scythe(infile)
# https://www.rdocumentation.org/packages/multiclassPairs/versions/0.4.3/topics/ReadData
ReadData(Data)
x <- list(value = 1)
class(x) <- "container"
class(x) # [1] "container"
print.container <- function (container) {
print(container$value)
}
print(x) # [1] 1
print
は総称関数なのでprint.{class}
が呼ばれるsetClass("container", representation(id = "character"), contains = "numeric")
x <- new("container", id = "3 random numbers", runif(3))
# An object of class "container"
# [1] 0.8540727 0.1615458 0.8514492
# Slot "id":
# [1] "3 random numbers"
x@id
# [1] "3 random numbers"
library(R6)
Person <- R6Class("Person",
public = list(
name = NULL,
initialize = function (name = NA) { self$name <- name },
introduce = function () { print(paste0("My name is ", self$name, ".\n")) }
)
)
person <- Person$new(name = "John")
person$introduce() # My name is John.
以上