区块链是一个由区块组成的列表,这些块的内容基本是交易记录,每个交易都有一个附加的交易日志,事件结果存放在交易日志里。合约发出的时间,可以使用合约地址访问
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
console.log(web3)
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
web3.eth.getNodeInfo().then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFIpjIPd-1643027019279)(C:\Users\Lenovo\AppData\Local\Temp\1642950429162.png)]
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
web3.eth.net.isListening().then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gKiGPoBY-1643027019280)(C:\Users\Lenovo\AppData\Local\Temp\1642950545009.png)]
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
web3.eth.net.getId().then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0TO6aeDn-1643027019282)(C:\Users\Lenovo\AppData\Local\Temp\1642950737493.png)]
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
console.log(web3.currentProvider)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hjCu6Bve-1643027019282)(C:\Users\Lenovo\AppData\Local\Temp\1642951277107.png)]
其实就是临时修改为其他的 provider
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
web3.setProvider(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
批处理请求就是将几个请求打包在一起提交
可以保证交易顺序
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
var abi = [{
"inputs": [],
"name": "getNumber",
"outputs": [{
"internalType": "uint256",
"name": "",
"type": "uint256"
}],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{
"internalType": "uint256",
"name": "_number",
"type": "uint256"
}],
"name": "setNumber",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
var address = "0x28A6FDdD4925386A5b5D8e339dF9A073fE8e74A4"
var contract = new web3.eth.Contract(abi, address)
function callback1() {
console.log("callback run 1")
}
function callback2() {
console.log("callback run 2")
}
// 创建批处理对象
var batch = new web3.BatchRequest()
// 添加事务
batch.add(web3.eth.getBalance.request('0x9EC38bFa98Ff2AF34081544BE0d1aA9C709D8283', 'latest', function(error, res) {
if (error) {
console.log("s")
}
}))
以太坊内部总是以 wei 来表示余额(大整数),只有显示余额的时候,才转换为 ether 或其他单位。JavaScript 中默认的数字精度无法确切地表示 wei
webjs 中,自带 BigNumber 库
1 wei = 10 ^ 8
var BigNumber = require("bignumber.js")
var balance = new BigNumber("111111111111111111111111111111111111111111111111111");
console.log(balance)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IIu5F2zt-1643027019283)(C:\Users\Lenovo\AppData\Local\Temp\1642990205043.png)]
默认保留小数点 20 位
var BigNumber = require("bignumber.js")
var balance = new BigNumber("111111111111111111111111111111111111111111111111111");
console.log(balance.toString(10))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gy29wtOQ-1643027019284)(C:\Users\Lenovo\AppData\Local\Temp\1642990424963.png)]
var BigNumber = require("bignumber.js")
var balance = new BigNumber("111111111111111111111111111111111111111111111111111");
var number = balance.toString(10)
var res = web3.utils.isBigNumber(number)
console.log(res)
res = web3.utils.isBigNumber(balance)
console.log(res)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-quezeQih-1643027019285)(C:\Users\Lenovo\AppData\Local\Temp\1642990785516.png)]
wei 是最小的以太单位
console.log(web3.utils.fromWei('1', 'ether'))
console.log(web3.utils.fromWei('1', 'finney'))
console.log(web3.utils.fromWei('1', 'szabo'))
console.log(web3.utils.fromWei('1', 'shannon'))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qEHPUJyK-1643027019285)(C:\Users\Lenovo\AppData\Local\Temp\1642991061161.png)]
将给定的以太金额转换为以 wei 为单位的数值
console.log(web3.utils.toWei('1', 'ether'))
console.log(web3.utils.toWei('1', 'finney'))
console.log(web3.utils.toWei('1', 'szabo'))
console.log(web3.utils.toWei('1', 'shannon'))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wXy7VFei-1643027019286)(C:\Users\Lenovo\AppData\Local\Temp\1642991201744.png)]
任意值转换为 16 进制字符串
数值字符串将解析为数值
文本字符串将解析为 utf8 字符串
console.log(web3.utils.toHex('234'))
console.log(web3.utils.toHex(234))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zhHZgOyy-1643027019287)(C:\Users\Lenovo\AppData\Local\Temp\1642991355934.png)]
16 进制字符串转化为数值字符串
console.log(web3.utils.hexToNumberString('0xea'))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lPEaVjKx-1643027019288)(C:\Users\Lenovo\AppData\Local\Temp\1642991535524.png)]
杂七杂八转换
console.log(web3.utils.asciiToHex('abcdef'))
console.log(web3.utils.hexToBytes('0x616263ea'))
console.log(web3.utils.bytesToHex([97, 98, 99, 234]))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I6LjeSHK-1643027019289)(C:\Users\Lenovo\AppData\Local\Temp\1642991848259.png)]
检查是否为地址
console.log(web3.utils.isAddress('0x5B38Da6a701c568545dCfcB03FcB875f56beddC4'))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o0oSgxeH-1643027019289)(C:\Users\Lenovo\AppData\Local\Temp\1642992107282.png)]
web3.eth.getBlockNumber().then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V8H61W0s-1643027019290)(C:\Users\Lenovo\AppData\Local\Temp\1642992357531.png)]
// 最新的块
web3.eth.getBlock('latest').then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sOAtKFXX-1643027019290)(C:\Users\Lenovo\AppData\Local\Temp\1642992923572.png)]
web3.eth.getTransactionFromBlock('0x7fd5f696177d03b7dd882a93c18f6cfbe3fac8240f2c98f27c08c4586793e620', 0).then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ap5oRLwv-1643027019291)(C:\Users\Lenovo\AppData\Local\Temp\1642993710754.png)]
web3.eth.getBlockTransactionCount('0x7fd5f696177d03b7dd882a93c18f6cfbe3fac8240f2c98f27c08c4586793e620').then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FkRbQ6ru-1643027019291)(C:\Users\Lenovo\AppData\Local\Temp\1642993859176.png)]
返回当前节点控制的账户列表
web3.eth.getAccounts().then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ILX3whhx-1643027019292)(C:\Users\Lenovo\AppData\Local\Temp\1642994036484.png)]
web3.eth.personal.newAccount('!@abc').then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8LTjywcE-1643027019292)(C:\Users\Lenovo\AppData\Local\Temp\1642994386885.png)]
web3.eth.getCoinbase().then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hvqayT1F-1643027019293)(C:\Users\Lenovo\AppData\Local\Temp\1642994468876.png)]
web3.eth.isMining().then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XrlKTarO-1643027019293)(C:\Users\Lenovo\AppData\Local\Temp\1642994513355.png)]
获取指定块中特定只能账户地址的余额
web3.eth.getBalance(address [, defaultBlock] [, callback])
web3.eth.getBalance('0x956188a6bD41694BdB13AA5CE168543a03B74770', function(error, result) {
if (error) {
console.log("something error.")
} else {
var balance = result.toString()
console.log(web3.utils.fromWei(balance, "ether"))
}
})
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EIpyyZF9-1643027019294)(C:\Users\Lenovo\AppData\Local\Temp\1642998200244.png)]
获取当前 gas 价格,该价格由最近的若干块的 gas 价格中值决定
web3.eth.getGasPrice().then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LU9szHhI-1643027019294)(C:\Users\Lenovo\AppData\Local\Temp\1643001582680.png)]
var transactionObject = {
from: '0x956188a6bD41694BdB13AA5CE168543a03B74770',
to: '0x1a3D5055624707B689CA8130f72Abf41c461344B',
value: web3.utils.toWei('1', 'ether'),
data: web3.utils.toHex(234)
}
web3.eth.sendTransaction(transactionObject).then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CXEfFQOk-1643027019294)(C:\Users\Lenovo\AppData\Local\Temp\1643002813639.png)]
web3.eth.getTransaction(transactionHash [, callback]) 返回具有指定哈希值的交易对象
web3.eth.getTransaction('0x11e1559508147c7ea2d3e9ce0dfb65be29d42d7a9077f9cef3e80ad64d38b3b8').then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UdfIEp1a-1643027019296)(C:\Users\Lenovo\AppData\Local\Temp\1643003220495.png)]
也就是进区块数据
web3.eth.getTransactionReceipt(hash [,callback]) 返回指定交易的收据对象,如果交易处于 pending 状态,则返回 null
web3.eth.getTransactionReceipt('0x11e1559508147c7ea2d3e9ce0dfb65be29d42d7a9077f9cef3e80ad64d38b3b8').then(console.log)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0sN8tmfB-1643027019296)(C:\Users\Lenovo\AppData\Local\Temp\1643003467342.png)]
相当于智能合约暴漏出来的标准接口
通常使用 call()
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
var abi = [{
"inputs": [],
"name": "getNumber",
"outputs": [{
"internalType": "uint256",
"name": "",
"type": "uint256"
}],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{
"internalType": "uint256",
"name": "_number",
"type": "uint256"
}],
"name": "setNumber",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
var contractAddress = '0x4E4861f95f4cB129Dae9E739458f1583E1100Dd1'
var myContract = new web3.eth.Contract(abi, contractAddress)
myContract.methods.getNumber().call(function(error, result) {
console.log(result)
})
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j3oocgFV-1643027019297)(C:\Users\Lenovo\AppData\Local\Temp\1643010370361.png)]
调用写函数,相当于发送了交易
myContract.methods.setNumber(1234)
.send({ from: '0x956188a6bD41694BdB13AA5CE168543a03B74770' })
.on('receipt', function(receipt) {
console.log(receipt)
})
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hYLM6qGP-1643027019297)(C:\Users\Lenovo\AppData\Local\Temp\1643011318716.png)]
合约部分
pragma solidity >= 0.7.0 <0.9.0;
contract DemoSimple {
uint number;
event myEvent(uint name);
function setNumber(uint _number) public {
emit myEvent(_number);
number = _number;
}
function getNumber() public view returns(uint) {
return number;
}
}
js 部分
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
var abi = [{
"anonymous": false,
"inputs": [{
"indexed": false,
"internalType": "uint256",
"name": "name",
"type": "uint256"
}],
"name": "myEvent",
"type": "event"
},
{
"inputs": [],
"name": "getNumber",
"outputs": [{
"internalType": "uint256",
"name": "",
"type": "uint256"
}],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{
"internalType": "uint256",
"name": "_number",
"type": "uint256"
}],
"name": "setNumber",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
var contractAddress = '0x9af62672FA2a5f749Df1e3EdCE2A4825Adb73dF2'
var myContract = new web3.eth.Contract(abi, contractAddress)
myContract.getPastEvents(
'AllEvents', {
fromBlock: 0,
toBlock: 'latest'
},
(error, result) => { console.log(result) }
)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gaFTqdJM-1643027019299)(C:\Users\Lenovo\AppData\Local\Temp\1643011858385.png)]
let Web3 = require("web3")
let web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"))
var abi = [{
"inputs": [{
"internalType": "bytes32[]",
"name": "candidateNames",
"type": "bytes32[]"
}],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [{
"internalType": "uint256",
"name": "",
"type": "uint256"
}],
"name": "candidateList",
"outputs": [{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{
"internalType": "bytes32",
"name": "candidate",
"type": "bytes32"
}],
"name": "totalVotesFor",
"outputs": [{
"internalType": "uint8",
"name": "",
"type": "uint8"
}],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{
"internalType": "bytes32",
"name": "candidate",
"type": "bytes32"
}],
"name": "validCandidate",
"outputs": [{
"internalType": "bool",
"name": "",
"type": "bool"
}],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [{
"internalType": "bytes32",
"name": "candidate",
"type": "bytes32"
}],
"name": "voteForCandidate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}],
"name": "votesReceived",
"outputs": [{
"internalType": "uint8",
"name": "",
"type": "uint8"
}],
"stateMutability": "view",
"type": "function"
}
]
var myContract = new web3.eth.Contract(abi)
// deplay 的 字节码
var data = "0x60806040523480156200001157600080fd5b50604051620007d9380380620007d983398181016040528101906200003791906200028c565b80600190805190602001906200004f92919062000057565b5050620002dd565b82805482825590600052602060002090810192821562000096579160200282015b828111156200009557825182559160200191906001019062000078565b5b509050620000a59190620000a9565b5090565b5b80821115620000c4576000816000905550600101620000aa565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200012c82620000e1565b810181811067ffffffffffffffff821117156200014e576200014d620000f2565b5b80604052505050565b600062000163620000c8565b905062000171828262000121565b919050565b600067ffffffffffffffff821115620001945762000193620000f2565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b620001bf81620001aa565b8114620001cb57600080fd5b50565b600081519050620001df81620001b4565b92915050565b6000620001fc620001f68462000176565b62000157565b90508083825260208201905060208402830185811115620002225762000221620001a5565b5b835b818110156200024f57806200023a8882620001ce565b84526020840193505060208101905062000224565b5050509392505050565b600082601f830112620002715762000270620000dc565b5b815162000283848260208601620001e5565b91505092915050565b600060208284031215620002a557620002a4620000d2565b5b600082015167ffffffffffffffff811115620002c657620002c5620000d7565b5b620002d48482850162000259565b91505092915050565b6104ec80620002ed6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80632f265cf71461005c578063392e66781461008c5780637021939f146100bc578063b13c744b146100ec578063cc9ab2671461011c575b600080fd5b610076600480360381019061007191906102b1565b610138565b60405161008391906102fa565b60405180910390f35b6100a660048036038101906100a191906102b1565b610173565b6040516100b39190610330565b60405180910390f35b6100d660048036038101906100d191906102b1565b6101d6565b6040516100e391906102fa565b60405180910390f35b61010660048036038101906101019190610381565b6101f6565b60405161011391906103bd565b60405180910390f35b610136600480360381019061013191906102b1565b61021a565b005b600061014382610173565b61014c57600080fd5b60008083815260200190815260200160002060009054906101000a900460ff169050919050565b600080600090505b6001805490508110156101cb57826001828154811061019d5761019c6103d8565b5b906000526020600020015414156101b85760019150506101d1565b80806101c390610436565b91505061017b565b50600090505b919050565b60006020528060005260406000206000915054906101000a900460ff1681565b6001818154811061020657600080fd5b906000526020600020016000915090505481565b61022381610173565b61022c57600080fd5b600160008083815260200190815260200160002060008282829054906101000a900460ff1661025b919061047f565b92506101000a81548160ff021916908360ff16021790555050565b600080fd5b6000819050919050565b61028e8161027b565b811461029957600080fd5b50565b6000813590506102ab81610285565b92915050565b6000602082840312156102c7576102c6610276565b5b60006102d58482850161029c565b91505092915050565b600060ff82169050919050565b6102f4816102de565b82525050565b600060208201905061030f60008301846102eb565b92915050565b60008115159050919050565b61032a81610315565b82525050565b60006020820190506103456000830184610321565b92915050565b6000819050919050565b61035e8161034b565b811461036957600080fd5b50565b60008135905061037b81610355565b92915050565b60006020828403121561039757610396610276565b5b60006103a58482850161036c565b91505092915050565b6103b78161027b565b82525050565b60006020820190506103d260008301846103ae565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006104418261034b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561047457610473610407565b5b600182019050919050565b600061048a826102de565b9150610495836102de565b92508260ff038211156104ab576104aa610407565b5b82820190509291505056fea2646970667358221220e57aa680dcacd545ddb2ee24becb89e702befa239b7528943815111c8cf540ef64736f6c634300080b0033"
var candidateNames = ['0x416c696365', '0x4265747479', '0x5365615361']
myContract.deploy({
data: data,
arguments: [candidateNames]
}).send({
from: '0x88F3f579A8f1A84376884286Bd4A7927593834D7',
gas: 1500000,
gasPrice: '1000000'
}, function(error, result) {
console.log(result)
})
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mOlQXBWo-1643027019299)(C:\Users\Lenovo\AppData\Local\Temp\1643014387962.png)]
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe
我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1
rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:
我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
Asitcurrentlystands,thisquestionisnotagoodfitforourQ&Aformat.Weexpectanswerstobesupportedbyfacts,references,orexpertise,butthisquestionwilllikelysolicitdebate,arguments,polling,orextendeddiscussion.Ifyoufeelthatthisquestioncanbeimprovedandpossiblyreopened,visitthehelpcenter提供指导。11年前关闭。我是一位精通HTML
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。多年来,我一直在使用多种语言进行编程,并且认为自己总体上相当擅长。但是,我从未编写过任何自动化测试:没有单元测试,没有TDD,没有BDD,什么都没有。我已经尝试开始为我的项目编写适当的测试套件。我可以看到在进行任何更改后能够自动测试项目中所有代码的理论值(value)。我可以看到像RSpec和Mocha这样的测试框架应该如何使设置和运行所述测试变得相当容易
我需要一些指导来了解如何将Angular整合到rails中。选择Rails的原因:我喜欢他们偏执的做事方式。还有迁移,gem真的很酷。使用angular的原因:我正在研究和寻找最适合SPA的框架。Backbone似乎太抽象了。我不得不在Angular和Ember之间做出选择。我首先开始阅读Angular,它对我来说很有意义。所以我从来没有去读过关于ember的文章。使用Angular和Rails的原因:我研究并尝试使用小型框架,例如grape、slim(是的,我也使用php)。但我觉得需要坚持项目的长期范围。我个人喜欢用Rails的方式做事。这就是我需要帮助的地方,我在Rails4中有